乐趣区

关于typescript:typescript-梳理

1. 赋值断言

  • 类属性应用赋值断言

官网示例:

class C {
  foo!: number;
  // ^
  // Notice this exclamation point!
  // This is the "definite assignment assertion" modifier.
  constructor() {this.initialize();
  }

  initialize() {this.foo = 0;}
}

如果去掉 foo 前面的感叹号会怎么?

报错提醒咱们 foo 没有初始化,也没有在构造函数中定义;意思就是在构造函数中初始化就不会报错了?

在构造函数中初始化确实不报错,反向证实报错信息很精确。

  • 变量申明应用赋值断言

官网示例

let x!: number[];
initialize();
x.push(4);

function initialize() {x = [0, 1, 2, 3];
}

去掉感叹号

报错信息通知咱们变量 x 在被赋值之前应用了。

提醒:

下面的报错信息都是建设在 tsconfig.json 设置 strict:true 的前提下,
在不应用赋值断言的前提下:

strictPropertyInitialization strict 变量 类属性
false true 报错 不报错
false false 不报错 不报错
true false 不报错 报错
true true 报错 报错

strictPropertyInitialization 的粒度更细,变量没有初始化导致报错没有更细粒度的参数去配置。

小结:对于提早初始化,typescript 没法推断进去,要通过赋值断言显示指定前面会为其初始化。

退出移动版