如何解决可以在保持严格性的同时将TypeScript字段初始化重构为一种方法吗?
说我有一个TypeScript类:
class Foo {
bar: number;
constructor() {
this.bar = 42;
}
}
如果我对其进行重构,使其看起来像这样:
class Foo {
bar: number;
constructor() {
this.init();
}
init() {
this.bar = 42;
}
}
然后,假设在编译器中启用了strictPropertyInitialization
,我将收到一个错误Property 'bar' has no initializer and is not definitely assigned in the constructor.
。
在我看来,该属性在后一种情况下的定义与前一种情况一样明确。如果引入了Foo
的其他一些子类,从而改变了init()
的实现,以至于不再是这种情况(可能会在规范中添加AFAIK“密封” /“最终”),那么将错误的位置放在所述子类中似乎是合乎逻辑的。我不确定为什么编译器无法识别它。
另一个不错的选择是使用非空断言bar!: number;
,但这会削弱严格性。
类似的问题已经问过好几次了,但是我不认为这是完全相同的问题。
Vue Prop has no initializer and is not definitely assigned in the constructor讨论了用于用默认值初始化属性的Vue装饰器。我不熟悉Vue,但我怀疑在那种情况下,该属性可能未在构造函数中初始化,但是在Vue对象生命周期的其他阶段不久之后,编译器将无法识别该属性。
无论如何,非常琐碎,没有什么无法解决的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。