TypeScript 抱怨未初始化的类属性,即使它似乎已正确分配。
这是一个最小的可重现示例:
type Config = {
color: string;
}
class Toto {
color: string;
constructor(config: Config) {
this.setConfig(config);
}
setConfig(config: Config) {
this.color = config.color;
}
}
编译器在color
属性定义下划线并抛出以下错误:
属性 'color' 没有初始化器,也没有在构造函数中明确分配。
问题似乎在于使用setConfig
方法设置 的值color
,因为以下代码不会产生编译器错误:
type Config = {
color: string;
}
class Toto {
color: string;
constructor(config: Config) {
this.color = config.color;
}
}
这个问题是我希望能够setConfig
在类实例的生命周期内使用该方法将类属性设置为不同的值。我不想为了setConfig
解决 TS 编译器问题而在构造函数和方法中重复相同的代码。
有谁知道为什么编译器看不到在构造函数中正确设置了类变量?
如果您作为开发人员确定color
不会在构造函数中未初始化,您可以告诉编译器这是这种情况:
type Config = {
color: string;
}
class Toto {
color!: string;
constructor(config: Config) {
this.setConfig(config);
}
setConfig(config: Config) {
this.color = config.color;
}
}
该!
告诉编译器,当这个变量将不会在该点为空!
时使用。
当然,在理想的世界中,编译器将能够检测到间接设置,但我认为目前这是不可能的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句