我正在尝试创建可用于同一类型对象的可重用接口。像UserDetails一样,在clarification.d.ts
declare module DataModel {
interface UserDetails {
userName: string;
userId: number;
}
}
所以我试图创建一个名称为DataModel的模块,它将具有多个对象类型。
在我的组件中,我创建了新变量,
public userDetails: DataModel.UserDetails;
注意:我已经导入了DataModel。
在ngOnInit()中,我试图为userDetails设置值,
ngOnInit() {
this.userDetails.userName = "Guest";
}
但是当代码运行时,我遇到了错误,
无法在变量userDetails上设置未定义的属性'userName'。
我也尝试在tsconfig.json中以类型数组添加'declaration.d.ts'文件,但它不起作用。
任何解决方法都值得赞赏。
该声明也很好,但是您忘了初始化变量,因此在使用时为undefined
。
我建议将其初始化为null
,然后将其检查为分配:
public userDetails: DataModel.UserDetails = null;
ngOnInit() {
this.userDetails = {
userName: 'Guest',
userId: 0,
};
}
请注意,您必须提供userId
,否则打字稿会告诉您在进行分配时未定义userId
。
如果您不想指定userId
,则将您的接口声明为:
declare module DataModel {
interface UserDetails {
userName: string;
userId?: number;
}
}
或将您的属性输入为:
public userDetails: Partial<DataModel.UserDetails>;
这将允许UserDetails的每个键都是可选的
替代
您可以像这样初始化数据:
public userDetails: DataModel.UserDetails = {
userName: null,
userId: 0,
};
然后将其用作:
ngOnInit() {
this.userDetails.userName = 'Guest';
}