TypeScript:确定赋值断言(使用叹号!)

勿动,下面文章引用:
https://www.malaoshi.top/show_1IX8jNcppeRa.html

说明

有时候,我们非常确定某个变量 不会是 null 或 undefined,但 TypeScript 的类型系统 无法推断出来。
这时可以使用非空断言运算符 !,告诉编译器:我知道这个值不是 null 或 undefined,请放心使用

注意: 谨慎使用,因为 不会 做任何检查

实例属性

错误写法

报错,因为属性 username 没有在构造方法中初始化

class User {
  username: string;

  constructor(username: string) {
    this.initialize(username);
  }

  private initialize(username: string) {
    this.username = username;
  }
}

正确写法

在属性 username 的后面写上 !,表示该属性会明确赋值

class User {
  username!: string;

  constructor(username: string) {
    this.initialize(username);
  }

  private initialize(username: string) {
    this.username = username;
  }
}

变量

错误写法

let x: number;
initialize(); // 在该方法中给变量 x 赋值
// Variable 'x' is used before being assigned.(2454)
console.log(2 * x); // 报错,因为没有给 x 显示赋值

function initialize() {
  x = 10;
}

正确写法

在变量 x 的后面写上 !,表示该变量会明确赋值

let x!: number;
initialize();
console.log(2 * x); // Ok

function initialize() {
  x = 10;
}

参考:
https://www.cnblogs.com/goloving/p/12097361.html