typescript - TypeScript 通过返回构造对象抱怨构造函数“没有初始化程序,并且没有在构造函数中明确分配”
问题描述
TypeScript 对此代码示例显示以下错误消息:
class MyClass {
someField: boolean;
constructor() {
return { someField: true };
}
}
属性 'someField' 没有初始化程序,也没有在构造函数中明确分配。
(属性)MyClass.someField:布尔值
TypeScript Playground(您需要启用strictNullChecks
并strictPropertyInitialization
查看此错误消息。)
给定的代码片段是从我的原始脚本中简化的。我想返回构造的值,而不是在构造函数中为 this 赋值。我应该怎么做才能使 TypeScript 正常工作而没有提到的错误?
解决方案
strictPropertyInitialization
强制您初始化类的构造函数中非可选的所有属性。此检查很有用,因为它可以确保您不会得到意外的未初始化属性。有几种方法可以解决这个错误,前两种是一般的方法,在你的情况下只有最后一种适用(为了完整起见,我包括了所有):
初始化字段
如果在声明字段或在构造函数中初始化它时将属性定义为boolean
好像应该是true
或初始化它:false
class MyClass {
someField: boolean = false;
constructor() {
return { someField: true };
}
}
使该字段可选
如果该字段可以undefined
,您应该在字段声明中使用?
或键入该字段来将其标记为undefined|boolean
class MyClass {
//someField?: boolean;
someField: boolean | undefined;
constructor() {
return { someField: true };
}
}
使用非空断言
在您的情况下,由于在构造函数中您实际上并没有初始化当前对象(this
)而是返回一个新对象,因此您可以告诉编译器该错误是错误的并使用非空断言。之所以专门引入此断言,是因为检查存在限制strictPropertyInitialization
,有时编译器会出错。对于这些情况,您可以覆盖编译器的想法,但您必须明确说明:
class MyClass {
someField!: boolean;
constructor() {
return { someField: true };
}
}
推荐阅读
- android - 无法使用匕首注入实例变量
- django - 为什么我不能对 Django 对象使用“.update()”?
- rust - 从 "reqwest" crate rust 发出 post 请求时,请求正文为空
- python - GET 请求在 Postman 上工作,但在终端上没有代码
- python - Kivy Tree View 如何保存用户的选择?
- c# - 如何为 Aspose.word 设置语言环境
- flutter - Flutter Moor 加入和在哪里
- bash - SQLITE3 从导入中排除 - 表中已经存在的数据行 - 不使用主键
- python - 部署到heroku(Django项目)后,Pandas数据框未按预期运行
- python - 如何使用 for 循环简化此字典创建