ts 更严格的类属性检查

strictPropertyInitialization

Typescript 2.7 引入了一个新的控制严格性的标记 –strictPropertyInitialization, 这个参数在 tsconfig.ts 中来配置

开启方式:

1
2
"strictNullChecks": true
"strictPropertyInitialization": true

作用

使用这个标记会确保类的每个实例属性都会在构造函数里或使用属性初始化器赋值。
它会明确地进行从变量到类的实例属性的赋值检查

举例

1
2
3
4
5
6
7
8
class C {
foo: number;
bar = "hello";
baz: boolean;
constructor() {
this.foo = 42;
}
}

上述代码,首先编辑器会报错: 属性“baz”没有初始化表达式,且未在构造函数中明确赋值。ts(2564)
其次在编译报错:error TS2564: Property 'baz' has no initializer and is not definitely assigned in the constructor.

两种都告诉开发者,应该给 baz 显示赋值,但是某种情况下,在初始化的时候我们并不想赋值,更期望是 undefined,而后再去赋值,此时 !: 就派上用场了。

!:

使用

在上述代码中 属性 baz 冒号之前加上 ! ,这样就不会报错了

1
2
3
4
5
6
7
8
class C {
foo: number;
bar = "hello";
baz!: boolean;
constructor() {
this.foo = 42;
}
}

作用

延迟初始化或重新初始化。

原创技术分享,您的支持将鼓励我继续创作