TypeScript是否具有Null条件运算符

时间:2017-08-01 14:49:05

标签: typescript typescript2.0

有没有像?在TypeScript中可以检查变量是否为空或未定义为Kotlin?像

return redirect()->action(
   'UserController@index', ['email' => $email]
);

7 个答案:

答案 0 :(得分:17)

不,截至目前,安全导航操作系统仍未在Typescript中实现: https://github.com/Microsoft/TypeScript/issues/16

然而,根据最新的标准化会议记录,它已被提出,所以也许v3:)

https://github.com/tc39/agendas/blob/master/2017/07.md

答案 1 :(得分:12)

是的,从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 stackoverflow question

答案 2 :(得分:6)

我遇到过同样的情况,以下情况对我有用。

首先,我定义了一个单独的类,其属性可以是null

export class Foo {
    id: number; //this can be null
}

然后在我的主课程中,我将属性foo设置为这个新类型:

foo: Foo

之后,我能够像这样使用它:

var fooId = (this.foo || ({} as Foo)).id;

这是我在当前版本的TypeScript中获得空传播的最接近的。

答案 3 :(得分:2)

实际上这与discussion中提到的javascript null safety this answer有关。我猜他们希望在获得打字稿之前在javascript上支持它。

答案 4 :(得分:0)

实际的好答案在Andreas'评论中。从Typescript 3.7起,您的示例将从下面实现:

person?.getName()?.firstName ?? "None"

请参见https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#nullish-coalescing

答案 5 :(得分:0)

它不仅在打字稿中受支持(从 3.7.2 版开始)。 现在 javascript 也支持它(自 ES2020 起)。

  • 在实践中,这意味着您可以在 Angular 等框架中使用它 (since v9 which supports typescript 3.7)。

  • 但特别是现在它在 ES2020 规范中,我们将看到它 无处不在。

答案 6 :(得分:0)

如果没有电子邮件,这会将 item 设置为 null

let item = user?.email;