typescript的类成员在构造函数里没有初始化报错,不忽略错误的情况下如何规避?

作者站长头像
站长
· 阅读数 15

我把初始化成员的过程放到一个方法reset()里了,然后在构造函数constructor里调用这个初始化方法,在严格模式下,ts会给出一个没有初始化的错误提示。情况如下:typescript的类成员在构造函数里没有初始化报错,不忽略错误的情况下如何规避?代码:

class A extends B {
    index: number; // 错误 属性“index”没有初始化表达式,且未在构造函数中明确赋值。
    constructor() {
        super();
        this.reset();
    }
    reset() {
        this.index = 0;
    }
    add() {
        ++this.index;
    }
}

查看同类问题https://segmentfault.com/q/10...。加入明确赋值断言index!: number;或者// @ts-ignore等的确可以忽略警告,但是如果我后续把reset函数给删了,或者reset漏写了初始化代码,也没有错误提示了。

class A extends B {
    index!: number; // 没有错误提示
    constructor() {
        super();
        this.reset();
    }
    reset() {
        // this.index = 0; // 不小心注释掉了
    }
    add() {
        ++this.index; // index为空,ts没有提示
    }
}

想要排除错误的话只能把初始化写在构造函数或者定义里,

class A extends B {
    index: number = 0; // 正常
    constructor() {
        super();
    }
    reset() {
        this.index = 0;
    }
    add() {
        ++this.index;
    }
}

我的问题是,有没有可能让ts或者ide识别出reset()函数这种情况呢?或者有没有更好的方法把重置的代码放在一个地方里,而不是写两遍初始化

回复
1个回答
avatar
test
2024-07-16

一个是属性的初始化,一个是你自己写的重置函数,并不是一回事。

TS 了还不按照 TS 的建议去写业务代码的话,上 TS 的意义又在哪里?

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容