下面的TypeScript代码在启用strictNullChecks
和strictPropertyInitialization
的情况下无法编译:
class SampleClass {
private _foo: string;
constructor(foo: string) {
this.foo = foo;
}
public get foo() {
return this._foo;
}
public set foo(foo: string) {
this._foo = foo;
}
}
编译器抱怨“属性'_foo'没有初始化程序,并且在构造函数中未明确分配。”
我可以通过在_foo
中添加一个明确的赋值声明来解决此问题,但是我不明白为什么需要这样做。构造函数调用foo
的setter,后者依次设置_foo
。这是一个错误,还是我不了解的东西?
在撰写本文时,我正在使用最新版本的TypeScript(3.2.1)。
答案 0 :(得分:0)
这是一个错误
不是,您已经声明自己正在运行严格模式打字稿。
有什么我不了解的
此代码:
private _foo: string;
没有初始化程序意味着在类实例化时,您将具有_foo undefined
的类型,但是您已经声明了string
的类型,而不是string | undefined
的类型。因此,您可以执行以下操作之一:
private _foo?: string;
// or
private _foo: string | undefined;
您将能够避免对该属性进行初始化。
该修改将导致您班上其他相关的人。
答案 1 :(得分:0)
不幸的是,看起来这是一个known issue,对于它确实是确定的分配断言。