typescript - TypeScript:如何在不使用明确赋值断言的情况下使用 setter 初始化类的成员?
问题描述
以下 TypeScript 代码无法编译strictNullChecks
并strictPropertyInitialization
启用:
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)。
解决方案
这是一个错误吗
不,您已经声明自己正在运行严格模式的打字稿。
有什么我不明白的吗
这段代码:
private _foo: string;
没有初始化程序意味着当您的类实例化时,您将拥有 _foo 类型undefined
,但您已经声明了 type string
,而不是 NOT string | undefined
。因此,您可以执行以下操作之一:
private _foo?: string;
// or
private _foo: string | undefined;
您将能够避免该属性的初始化。
该修改将导致您班级中的其他相关修改。
推荐阅读
- jenkins - wget:在 Jenkins 管道中找不到命令
- visual-studio-code - 如何修复 vs code / textmate 语言配置中的注释
- azure - 我可以备份存储在 Azure 托管实例中的服务主密钥吗?
- oracle - 检查输入日期是否不在第一行到最后一行plsql中的date1和date2之间
- html - 如何修复引导手风琴卡标题中不稳定的列间距?
- javascript - 如何将毫秒添加到日期时间对象
- html - 背景颜色不会在每个断点处改变
- python - 找不到 tensorflow-gpu==1.12.0
- excel - Office 365 更新到版本 1908 - VBA 参考/对象库
- angular - 如何实现选择离子选择的所有功能?