繁体   English   中英

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

[英]TypeScript: how do I initialize members of a class using setters without using a definite assignment assertion?

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

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

这是一个错误吗

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

有我不明白的东西吗

这段代码:

private _foo: string;

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

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

这样您就可以避免对该属性进行初始化。

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

不幸的是,这似乎是一个已知问题 ,对它而言,确定分配断言确实是解决方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM