TypeScript:strictPropertyInitialization 实例属性都必须初始化(严格校验)

说明

strictPropertyInitialization 设置类的实例属性都 必须初始化

配置

如果指定 tsconfig.json 配置文件,并且指定下面配置:

{
  "compilerOptions": {
    "strict": true, // 设置严格检查,设置该项,默认设置strictPropertyInitialization为true
  }
}

或

{
  "compilerOptions": {
    "strictPropertyInitialization": true, // 类的实例属性都必须初始化
    "strictNullChecks": true, // 必须同时打开该配置
  }
}

报错代码

class User {
  // 报错,属性 username 没有初始化
  username: string;
}

基本解决方法

解决方法一:定义属性时直接赋值

class User {
  username = "张三";
}

解决方法二:在构造方法中赋值

class User {
  username: string;

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

解决方法三

class User {
  constructor(public username: string) {}
}

其他解决方法

有时候,我们确定某个变量 不会是 null 或 undefined,但 无法 定义时赋值,也 无法在构造方法中赋值,用下面解决方法

解决方法一:联合类型

class User {
  // 表示username即可以是string,也可以是 undefind 类型
  username: string | undefined;
}

解决方法二:确定赋值断言

详见下文中的实例属性:
https://www.malaoshi.top/show_1IX8kU8YAqoL.html#实例属性


原文出处:/show_1IX8jNcppeRa.html