可以在保持严格性的同时将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 (将#修改为@)