TypeScript:如何在不使用定值分配断言的情况下使用setter初始化类的成员?

时间:2018-12-16 20:14:53

标签: typescript

下面的TypeScript代码在启用strictNullChecksstrictPropertyInitialization的情况下无法编译:

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)。

2 个答案:

答案 0 :(得分:0)

  

这是一个错误

不是,您已经声明自己正在运行严格模式打字稿。

  

有什么我不了解的

此代码:

private _foo: string;

没有初始化程序意味着在类实例化时,您将具有_foo undefined的类型,但是您已经声明了string的类型,而不是string | undefined的类型。因此,您可以执行以下操作之一:

private _foo?: string;
// or
private _foo: string | undefined;

您将能够避免对该属性进行初始化。

该修改将导致您班上其他相关的人。

答案 1 :(得分:0)

不幸的是,看起来这是一个known issue,对于它确实是确定的分配断言。