我有一个对象X和一个方法getY(),返回一个对象Y和一个方法a(),在typescript中.

X.getY()!.a()

我猜!运算符是用来判断null的,但它具体是如何工作的呢?语言的定义在哪里?

推荐答案

它被称为"非空断言运算符",它告诉编译器x.getY()不是空的.

It's a new typescript 2.0 feature and you can read about it in the what's new page, here's what it says:

一个新的!post fix表达式运算符可用于断言其

// Compiled with --strictNullChecks
function validateEntity(e?: Entity) {
    // Throw exception if e is null or invalid entity
}

function processEntity(e?: Entity) {
    validateEntity(e);
    let s = e!.name;  // Assert that e is non-null and access name
}

编辑

There's an issue for documenting this feature: Document non-null assertion operator (!)

Typescript相关问答推荐

TypScript错误:类型{ children:ReactNode; }与动态React组件中的IntrinsicLedger类型没有共同的属性

输入具有相同键但值类型不同的对象

如何使用Generics保留构造函数的类型信息?

类型脚本不会推断键的值类型

如何基于对象关键字派生类型?

TypeScript实用程序类型—至少需要一个属性的接口,某些指定属性除外

有没有可能使用redux工具包的中间件同时监听状态的变化和操作

使用带有RxJS主题的服务在Angular中的组件之间传递数据

我用相同的Redux—Toolkit查询同时呈现两个不同的组件,但使用不同的参数

react 路由6操作未订阅从react 挂钩表单提交+也不使用RTK查询Mutations

在分配给类型的只读变量中维护const的类型

迭代通过具有泛型值的映射类型记录

寻址对象中路径的泛型类型

如何将别名添加到vitest配置文件?

map 未显示控制台未显示任何错误@reaction-google-map/api

记录的子类型<;字符串,X>;没有索引签名

使用受保护的路由和入门来响应路由

带有 Select 器和映射器的Typescript 泛型

基于可选参数的动态类型泛型类型

递归地排除/省略两种类型之间的公共属性