tsh*_*tsh 2 constructor typescript
TypeScript在此代码示例中显示以下错误消息:
class MyClass {
someField: boolean;
constructor() {
return { someField: true };
}
}
Run Code Online (Sandbox Code Playgroud)
属性“ someField”没有初始化程序,并且在构造函数中未明确分配。
(属性)MyClass.someField:布尔值
TypeScript Playground(您需要启用strictNullChecks并strictPropertyInitialization查看此错误消息。)
给定的代码段比我的原始脚本简化了。我想返回构造的值,而不是在构造函数中给它赋值。我该怎么办才能使TypeScript正常运行而不会出现错误?
GMK*_*ain 13
解决方案1
在名称后添加 (!) 符号:
someField!:string;
Run Code Online (Sandbox Code Playgroud)
解决方案2
打开 TypeScript 配置文件
tsconfig.json并将此代码添加到编译器选项
"angularCompilerOptions": {
// ...
"strictPropertyInitialization": false
// ...
}
Run Code Online (Sandbox Code Playgroud)
注意:它会使静态分析变弱
strictPropertyInitialization强制您初始化该类的构造函数中所有非可选的属性。此检查很有用,因为它可以确保您不会获得意外的未初始化属性。有几种方法可以解决该错误,前两种是解决该错误的一般方法,在您的情况下,仅适用最后一种方法(为完整性起见,我将所有内容都包括在内):
初始化字段
如果在定义属性时将属性定义为boolean应有的属性,true或者false在声明该字段或在构造函数中对其进行初始化时,将其初始化:
class MyClass {
someField: boolean = false;
constructor() {
return { someField: true };
}
}
Run Code Online (Sandbox Code Playgroud)
将字段设为可选
如果该字段可以是undefined,则应在字段声明中将此字段标记为,方法是使用?或将字段键入为undefined|boolean
class MyClass {
//someField?: boolean;
someField: boolean | undefined;
constructor() {
return { someField: true };
}
}
Run Code Online (Sandbox Code Playgroud)
使用一个非空的断言
在您的情况下,由于实际上不是在构造函数中初始化当前对象(this),而是返回一个新的对象,因此可以告诉编译器该错误是错误的,并使用一个非null的断言。专门引入此断言是因为strictPropertyInitialization检查有局限性,有时编译器会把它弄错。在这种情况下,您可以覆盖编译器的想法,但您必须明确说明一下:
class MyClass {
someField!: boolean;
constructor() {
return { someField: true };
}
}
Run Code Online (Sandbox Code Playgroud)
"angularCompilerOptions": {
// ...
"strictPropertyInitialization": false
// ... }
Run Code Online (Sandbox Code Playgroud)
根据 Angular 最新版本,它支持严格输入,因此您必须禁用它。
进行修改并重启服务器
| 归档时间: |
|
| 查看次数: |
3693 次 |
| 最近记录: |