这是我的代码
interface IClassMasks {
arrMasksMultiple: string[];
arrMasksSingle: string[];
strMarker: string;
strMarkerMaskName: string;
}
class ClassMasks implements IClassMasks {
public arrMasksMultiple;
public arrMasksSingle;
public strMarker;
public strMarkerMaskName;
constructor() {
this.arrMasksMultiple = [];
this.arrMasksSingle = [];
this.strMarker = null;
this.strMarkerMaskName = 'strMarkerMask';
}
}
当我将鼠标悬停在编辑器中的arrMasksMultiple上时,它说-
成员“ arrMasksMultiple”隐式具有“ any”类型,但可以根据使用情况推断出更好的类型
因此,如果成员说-'any'类型,则它不能利用上面的界面。
答案 0 :(得分:1)
您仍然需要声明类内部字段的类型;这些类型还必须与您要实现的接口兼容。默认情况下,类型被隐式假定为any
,与IClassMasks
中定义的类型不兼容。
此外,您无法将null
分配给IClassMasks.strMarker
,因为未指定类型也可以是null
。
以下是修改后的输入内容:
interface IClassMasks {
arrMasksMultiple: string[];
arrMasksSingle: string[];
strMarker: string | null; // indicate that this can also be a null value
strMarkerMaskName: string;
}
class ClassMasks implements IClassMasks {
// explicitly declare the types of these fields that are compatible with the IClassMasks interface
public arrMasksMultiple: string[];
public arrMasksSingle: string[];
public strMarker: string | null; // indicate that this can also be a null value
public strMarkerMaskName: string;
constructor() {
this.arrMasksMultiple = [];
this.arrMasksSingle = [];
this.strMarker = null;
this.strMarkerMaskName = 'strMarkerMask';
}
}
为简便起见,您还可以分配默认值,而不是在构造函数中分配默认值。这是一个示例,其中前三个字段具有默认值。
class ClassMasks implements IClassMasks {
public arrMasksMultiple: string[] = [];
public arrMasksSingle: string[] = [];
public strMarker: string | null = null;
public strMarkerMaskName: string;
constructor() {
this.strMarkerMaskName = 'strMarkerMask';
}
}