Object ! 对象方法之后的typescript中的运算符
我有一个对象Object ! 对象方法之后的typescript中的运算符,object,typescript,operators,Object,Typescript,Operators,我有一个对象X,方法是getY()返回一个对象Y,方法是a(),在typescript中。 像这样的表达是什么意思: X.getY()!.a() 我猜是运算符用于检查null,但它具体是如何工作的?在语言中定义了Where?它被称为“非空断言运算符”,它告诉编译器x.getY()不是空的 这是一个新的typescript 2.0功能,您可以在页面中阅读,下面是它的说明: 一个新的!post fix表达式运算符可用于断言其 操作数在类型为 核查人员无法得出那个事实的结论。具体来说,是行动 x!生
X
,方法是getY()
返回一个对象Y
,方法是a()
,在typescript中。
像这样的表达是什么意思:
X.getY()!.a()
我猜是
运算符用于检查null,但它具体是如何工作的?在语言中定义了Where?它被称为“非空断言运算符”,它告诉编译器x.getY()
不是空的
这是一个新的typescript 2.0功能,您可以在页面中阅读,下面是它的说明:
一个新的!post fix表达式运算符可用于断言其
操作数在类型为
核查人员无法得出那个事实的结论。具体来说,是行动
x!生成x类型的值,并排除null和undefined。
与形式x和x as T的类型断言类似!
只需在发出的声明中删除非null断言运算符
JavaScript代码
编辑 非空断言运算符:!
- 您告诉TS编译器变量的值不是
null |未定义的
- 在掌握TS编译器所缺乏的知识时使用它
下面是一个简单的例子,说明它的作用:
let nullable1: null | number;
let nullable2: undefined | string;
let foo = nullable1! // type foo: number
let fooz = nullable2! // type fooz: string
它基本上从类型中删除null | undefined
我什么时候用这个? Typescript已经非常擅长推断类型,例如使用typeguards:
let nullable: null | number | undefined;
if (nullable) {
const foo = nullable; // ts can infer that foo: number, since if statements checks this
}
但是,有时我们会遇到如下情况:
type Nullable = null | number | undefined;
let nullable: Nullable;
validate(nullable);
// Here we say to ts compiler:
// I, the programmer have checked this and foo is not null or undefined
const foo = nullable!; // foo: number
function validate(arg: Nullable) {
// normally usually more complex validation logic
// but now for an example
if (!arg) {
throw Error('validation failed')
}
}
我个人的建议是尽可能避免接线员。让编译器完成静态检查代码的工作。但是,在某些情况下,尤其是在供应商代码中,使用此运算符是不可避免的。wow。我大概写了两千遍
e&&e.name
。thanks@Tope不要将其与其他语言(a?.b?.c?.d?)的“空安全运算符”混淆。这只是告诉typescript编译器一个变量不是空的,它可能是假的,并且它会在运行时崩溃。它的一个好的用例是什么?因为如果我必须检查空值,这不符合目的吗?@StLia如果你确定某个东西不是空值,并且你不想/不需要检查空值,那该怎么办?@Rishav是的,关于(javascript)可选链接操作符,你是对的,关于(typescript)非空断言操作符,你也是对的。但它们的含义也完全不同。第一个说“我不确定,它可以为null,但如果不确定,请继续……”但后一个说“我100%确定它不是null”。
type Nullable = null | number | undefined;
let nullable: Nullable;
validate(nullable);
// Here we say to ts compiler:
// I, the programmer have checked this and foo is not null or undefined
const foo = nullable!; // foo: number
function validate(arg: Nullable) {
// normally usually more complex validation logic
// but now for an example
if (!arg) {
throw Error('validation failed')
}
}