TypeScript 是不是有 Null 条件运算符
Posted
技术标签:
【中文标题】TypeScript 是不是有 Null 条件运算符【英文标题】:Does TypeScript have a Null-conditional operatorTypeScript 是否有 Null 条件运算符 【发布时间】:2018-01-08 12:19:06 【问题描述】:有没有类似的运算符?在 TypeScript 中可以检查变量是否为 null 或未像 Kotlin 那样定义?喜欢
person?.getName()?.firstName ?: "None"
【问题讨论】:
据我所知,只有一个运算符告诉编译器一个值不会是null
: (person!.getName()
)
Does Typescript support the ?. operator? (And, what's it called?)的可能重复
是的。但我认为这个运算符仅适用于编译器,但不做任何检查。如果这个人在运行时为空,我想它会导致错误。对吗?
是的,你是对的。当我搜索?在打字稿中,*** 没有给出。抱歉重复。
在 html 中允许但在 TS 中不允许
【参考方案1】:
如果没有电子邮件,这会将item
设置为null
:
let item = user?.email;
【讨论】:
【参考方案2】:它不仅在 typescript 中受支持(自版本 3.7.2 起)。 javascript 现在也支持它(从 ES2020 开始)。
实际上,这意味着您可以在 Angular 等框架中使用它 (since v9 which supports typescript 3.7)。
但尤其是现在 它在 ES2020 规范中,我们将看到它 无处不在。
【讨论】:
【参考方案3】:真正好的答案在Andreas'评论中。从 Typescript 3.7 开始,您的示例将按如下方式实现:
person?.getName()?.firstName ?? "None"
见https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#nullish-coalescing
【讨论】:
【参考方案4】:是的,从 Typescript 3.7 开始,您现在可以通过 optional-chaining 执行此操作
person?.getName()?.firstName
被转译为
let firstName = person === null || person === void 0 ? void 0 : (_person$getName = person.getName()) === null || _person$getName === void 0 ? void 0 : _person$getName.firstName;
注意检查是否为空。如果例如将人定义为
,这将按预期工作let person:any = null; //no runtime TypeError when calling person?.getName()
但是如果人被定义为
let person:any = ;//Uncaught TypeError: person.getName is not a function
另见similar *** question
【讨论】:
同样,nullish coalescing operator 从 TS 3.7 开始也存在:let x = foo ?? bar();
【参考方案5】:
我在我的代码中使用它来检查 null
this.firstname = (this.firstname != null) ? this.firstname : this.firstname;
在 v3 发布之前可以这样做
【讨论】:
【参考方案6】:我遇到了同样的情况,以下对我有用。
首先,我定义了一个单独的类,其属性可以是null
:
export class Foo
id: number; //this can be null
然后在我的主类中,我将属性foo
设置为这个新类型:
foo: Foo
之后,我就可以这样使用它了:
var fooId = (this.foo || ( as Foo)).id;
这是我在当前版本的 TypeScript 中最接近空传播的方法。
【讨论】:
【参考方案7】:实际上这与this answer 中提到的javascript null 安全discussion 有关。我猜他们希望在使用 typescript 之前在 javascript 上支持它。
【讨论】:
【参考方案8】:不,到目前为止,Typescript 中仍未实现安全导航操作符: https://github.com/Microsoft/TypeScript/issues/16
但是根据最新的标准化会议记录,它已经提出,所以可能是 v3 :)
https://github.com/tc39/agendas/blob/master/2017/07.md
【讨论】:
谢谢。我浏览了手册,但没有找到任何东西。我认为这个操作符既有用又漂亮,消除了很多垃圾代码。你知道这个算子未来是否会被纳入 ES 标准吗? 作为旁注打字稿确实有?
运算符,但没有这样做。
对于任何寻找的人,这里是related javascript proposal。
所以也许 v3 v3 已经出局了,也许这个答案需要更新(即使只是说如果是这种情况它不被接受
我正在使用 Typescript v3.7.2 但仍未找到此功能。有人可以帮忙吗?以上是关于TypeScript 是不是有 Null 条件运算符的主要内容,如果未能解决你的问题,请参考以下文章