代码:
class Cat extends Animal { tag! : 'cat' }
Run Code Online (Sandbox Code Playgroud)
“!” 是什么意思?声明后的意思tag?它与只是有什么不同tag?
让我们看一个例子 - 假设我们有以下代码:
interface Animal {
tag: string;
}
class Cat implements Animal { tag: 'cat' }
Run Code Online (Sandbox Code Playgroud)
class AnimalClass {
tag: string | undefined;
}
class Dog extends AnimalClass { tag: 'dog' }
Run Code Online (Sandbox Code Playgroud)
两个代码片段都会抛出以下内容:Property 'tag' has no initializer and is not definitely assigned in the constructor.(2564)。
这是 TypeScript 在 2.7.2 中添加的一项功能,其中包括严格的类检查,所有属性都应在其构造函数内声明。
通过添加感叹号!,您将覆盖此行为并告诉编译器您“知道”,它正在正确初始化并且以后不会被取消定义。
您也可以通过"strictPropertyInitialization": false在编译器选项中设置来禁用它。或者你在应该初始化的地方初始化属性(根据 TypeScript):
class Dog extends AnimalClass {
tag: string;
constructor() {
super();
this.tag = "";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
903 次 |
| 最近记录: |