【问题标题】:What means "null!" in TypeScript? [duplicate]什么是“空!”在打字稿中? [复制]
【发布时间】:2020-02-23 19:00:29
【问题描述】:

我希望创建一个受ngxs/form-plugin 启发的角度指令

搜索他们的代码我发现了一些有趣的东西:

@Input('ngxsForm')
  path: string = null!;

为什么null末尾有否定字符?

【问题讨论】:

  • 那不是 JavaScript
  • @MarcSances 即使应用于文字值,就像这里一样?
  • 一个额外的皱纹:null! 在 TypeScript 中是一个“非空 null”,这是不可能的。 null! 的类型是 never,bottom type,并且可以分配给所有其他类型。因此,TypeScript 将允许您将 null! 用于任何类型的值,例如上面的 string。当然,这是对编译器的欺骗; null 在运行时不是 string。如果你想对编译器撒谎,例如,假装初始化一个类属性而你没有,null! 是一种简洁的方法。

标签: angular typescript ngxs


【解决方案1】:

! 是一个打字稿运算符,它断言表达式不是null。这被称为non-null assertion operator,并被添加为一种速记,以使严格的空检查静音。 ! 的作用基本上是把null 去掉了它所应用的表达式的类型。比如:

declare let x: string | null;
let y = x! // string

通常path: string = null 无效,因为path 是string 并且不能将null 分配给它。 null! 的类型是 never,因为我们告诉编译器将 null 从 null 的类型中取出,所以我们没有 never 的类型。由于每个类型的子类型never 都可以分配给string

我们最终得到的是一个字段 (path),它的类型禁止null,实际上分配了null。这就是断言的本质,它们迫使编译器接受它知道是无效的东西。如果字段是通过其他方式初始化的,有时这很有用,不确定您遇到的确切用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 2017-05-25
    • 1970-01-01
    • 2017-03-11
    • 2019-11-15
    • 2021-04-24
    • 1970-01-01
    相关资源
    最近更新 更多