Typescript 中存在感叹号,但不是不可空类型断言

2024-05-07

在 Angular 5.2 typescript 源代码中发现了一些有趣的代码:

  1. 数组索引变量前面有感叹号here https://github.com/angular/angular/blob/master/packages/platform-webworker/src/web_workers/shared/service_message_broker.ts#L64

    signature ![i]

  2. 函数调用括号前面有感叹号here https://github.com/angular/angular/blob/master/packages/platform-webworker/src/web_workers/shared/service_message_broker.ts#L76

    this._methods.get(message.method) !(message);

在 Typescript Playground 中尝试了此语法 - 没有错误:here https://www.typescriptlang.org/play/index.html#src=let%20signature%3A%20Array%3Cany%3E%20%3D%20%5B'test'%5D%0D%0Alet%20i%20%3D%200%3B%0D%0Aconsole.log(signature%20!%5Bi%5D)%0D%0A%0D%0Alet%20f%20%3D%20()%20%3D%3E%20true%3B%0D%0A%0D%0Af%20!()%3B%0D%0A

但仍然无法找到/理解这意味着什么。请帮忙。


这是一个老问题,但我尝试回答它。

周围空无一物!并不重要。这 !在你的情况下也是不必要的。但如果稍微修改一下,你就会发现问题:

let signature: Array<any>|undefined = ['test']
let i = 0;
console.log(signature ! [i])
signature=undefined
console.log(signature ! [i]) // <= crash

和 !你说:之前的对象不为空。 Typescript 信任你,如果你的假设错误,编译的 Javascript 将失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript 中存在感叹号,但不是不可空类型断言 的相关文章

随机推荐