首页 > 解决方案 > TypeScript:如何在不使用明确赋值断言的情况下使用 setter 初始化类的成员?

问题描述

以下 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,但我不明白为什么需要这样做。构造函数调用 setter for foo,而后者又设置_foo. 这是一个错误,还是有什么我不明白的?

在撰写本文时,我使用的是最新版本的 TypeScript(3.2.1)。

标签: typescript

解决方案


这是一个错误吗

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

有什么我不明白的吗

这段代码:

private _foo: string;

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

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

您将能够避免该属性的初始化。

该修改将导致您班级中的其他相关修改。


推荐阅读