代码如下:
在HTML标记声明后加上"!",代表这是一个注释的声明。与只有标记声明不同,它不会被浏览器解析为标记元素。
class Cat extends Animal { tag! : 'cat' }
在HTML标记声明后加上"!",代表这是一个注释的声明。与只有标记声明不同,它不会被浏览器解析为标记元素。
class Cat extends Animal { tag! : 'cat' }
让我们看一个例子 - 假设我们有以下代码:
interface Animal {
tag: string;
}
class Cat implements Animal { tag: 'cat' }
class AnimalClass {
tag: string | undefined;
}
class Dog extends AnimalClass { tag: 'dog' }
这两个代码段都会报以下错误: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 = "";
}
}
class Cat extends Animal { tag : 'cat' }
声明中没有错误。 - RandomB