[英]TypeScript: how do I initialize members of a class using setters without using a definite assignment assertion?
在启用strictNullChecks
和strictPropertyInitialization
的情况下,以下TypeScript代码无法编译:
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)。
这是一个错误吗
不,您已经声明自己正在运行严格模式打字稿。
有我不明白的东西吗
这段代码:
private _foo: string;
没有初始化程序意味着在类实例化时,您将拥有_foo类型的undefined
,但是您已经声明了类型string
和NOT string | undefined
string | undefined
。 因此,您可以执行以下操作之一:
private _foo?: string;
// or
private _foo: string | undefined;
这样您就可以避免对该属性进行初始化。
该修改将导致您班上其他相关的人。
不幸的是,这似乎是一个已知问题 ,对它而言,确定分配断言确实是解决方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.