TypeScript 4.1 是 TypeScript 的一个新版本,它扩展了 TypeScript 3.7 的支持,增加了两个新的特性:带问号的链操作符和 nullish 合并。这两个特性都是为了更好地处理可选值和空值而设计的。
带问号的链操作符
带问号的链操作符是 TypeScript 3.7 中引入的一个新特性。它可以让你更方便地访问对象的属性和方法,而不用担心对象不存在或者属性不存在的情况。
在 TypeScript 4.1 中,带问号的链操作符得到了扩展。现在,你可以在链操作符中使用函数调用,而不仅仅是属性访问。这个新特性可以让你更方便地处理函数返回的可选值。
下面是一个示例代码:
-- -------------------- ---- ------- --------- ------ - ------ ------- ----- ------- ------------ ----- - -------- -------------------- ------- - ----------------------------------------- ----------------------- -- --- --------------------- - ------------- ----- -------- ---- --- --------- -- -- -------------------- --- ------------- ---- -- --- --------------
在这个示例代码中,我们定义了一个 Person
接口,它有三个可选属性:name
、age
和 sayHello
。我们定义了一个 printPerson
函数,它接受一个可选的 Person
对象作为参数,并打印出 name
的大写形式、age
的值和调用 sayHello
方法。
在 printPerson
函数中,我们使用了带问号的链操作符来访问 person
对象的属性和方法。如果 person
对象不存在,或者 name
或 sayHello
属性不存在,链操作符会返回 undefined
。如果 age
属性不存在,我们使用了 nullish 合并操作符 ??
来返回默认值 0
。
nullish 合并
nullish 合并是 TypeScript 4.0 中引入的一个新特性。它可以让你更方便地处理空值或者 undefined 值。
在 TypeScript 4.1 中,nullish 合并得到了扩展。现在,你可以在 nullish 合并中使用函数调用,而不仅仅是属性访问。这个新特性可以让你更方便地处理函数返回的空值或者 undefined 值。
下面是一个示例代码:
function getPersonName(person?: { name?: string }) { return person?.name ?? 'Unknown'; } console.log(getPersonName({ name: 'Alice' })); console.log(getPersonName({})); console.log(getPersonName());
在这个示例代码中,我们定义了一个 getPersonName
函数,它接受一个可选的 person
对象作为参数,并返回 person.name
的值,如果 person
对象不存在或者 name
属性不存在,返回默认值 'Unknown'
。
在 getPersonName
函数中,我们使用了带问号的链操作符来访问 person
对象的 name
属性。如果 person
对象不存在,或者 name
属性不存在,链操作符会返回 undefined
。如果返回值是 undefined
,我们使用了 nullish 合并操作符 ??
来返回默认值 'Unknown'
。
总结
TypeScript 4.1 扩展了 TypeScript 3.7 的支持,增加了带问号的链操作符和 nullish 合并。这两个特性都是为了更好地处理可选值和空值而设计的。带问号的链操作符可以让你更方便地访问对象的属性和方法,而不用担心对象不存在或者属性不存在的情况。nullish 合并可以让你更方便地处理空值或者 undefined 值。这两个特性都可以让你更方便地编写类型安全的代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/668862b0dc1ed1a61ba72aa9