typescript - 将类型分配给类的打字稿成员的正确方法是什么
问题描述
这是我的代码
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
,这与 中定义的类型不兼容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';
}
}
为简洁起见,您还可以分配默认值,而不是在构造函数中分配它们。这是一个示例,其中前 3 个字段具有默认值。
class ClassMasks implements IClassMasks {
public arrMasksMultiple: string[] = [];
public arrMasksSingle: string[] = [];
public strMarker: string | null = null;
public strMarkerMaskName: string;
constructor() {
this.strMarkerMaskName = 'strMarkerMask';
}
}
推荐阅读
- intellij-idea - Windows 上 IntelliJ 的 Chmod?
- terraform - Terraform 0.12 语法将本地地图转换为列表输出
- sql - 计算 SQL 中的重复项并按特定列分区
- css - CSS TranslateX 不会移动到 div 的右侧
- gridview - yii2 - 用数据库中两个表中的数据填充表
- ios - 如何设置 CALayer 的阴影打破 AutoLayout 约束?
- javascript - 将表单序列化和列表传递给控制器不起作用?
- wordpress - 将路由 53 dns 指向 AWS EC2 中的 wordpress 站点
- python-3.x - Pyautogui - 使用使用特殊键的代码时,键有时会卡住
- c - 用C中的其他字符替换空字符