Angular6 angular 8中的可重用类型(接口)
我试图创建可重用的接口,它可以用于相同类型的对象。 与UserDetails一样,在declaration.d.ts中Angular6 angular 8中的可重用类型(接口),angular6,angular7,angular8,typescript-typings,Angular6,Angular7,Angular8,Typescript Typings,我试图创建可重用的接口,它可以用于相同类型的对象。 与UserDetails一样,在declaration.d.ts中 declare module DataModel { interface UserDetails { userName: string; userId: number; } } 因此,我尝试创建一个名为DataModel的模块,该模块将具有多个对象类型 在我的组件中,我创建了一个新变量 public userDetails: D
declare module DataModel {
interface UserDetails {
userName: string;
userId: number;
}
}
因此,我尝试创建一个名为DataModel的模块,该模块将具有多个对象类型
在我的组件中,我创建了一个新变量
public userDetails: DataModel.UserDetails;
注意:我已经导入了数据模型
在ngOnInit()中,我试图为userDetails设置值
ngOnInit() {
this.userDetails.userName = "Guest";
}
但是,当代码运行时,我发现错误如下
无法在变量userDetails上设置未定义的属性“userName”
我也尝试在类型数组的tsconfig.json中添加'declaration.d.ts'文件,但它不起作用
任何解决方法都值得赞赏。声明很好,但您忘记初始化变量,因此当您使用它时,
未定义
我建议将其初始化为null
,然后执行分配:
public userDetails: DataModel.UserDetails = null;
ngOnInit() {
this.userDetails = {
userName: 'Guest',
userId: 0,
};
}
请注意,您不必提供用户ID
,否则Typescript将告诉您用户ID
在分配时没有定义
如果不想指定用户ID
,请将接口声明为:
declare module DataModel {
interface UserDetails {
userName: string;
userId?: number;
}
}
或将属性键入为:
public userDetails: Partial<DataModel.UserDetails>;
然后将其用作:
ngOnInit() {
this.userDetails.userName = 'Guest';
}
声明很好,但您忘记初始化变量,因此当您使用它时,它是未定义的
我建议将其初始化为null
,然后执行分配:
public userDetails: DataModel.UserDetails = null;
ngOnInit() {
this.userDetails = {
userName: 'Guest',
userId: 0,
};
}
请注意,您不必提供用户ID
,否则Typescript将告诉您用户ID
在分配时没有定义
如果不想指定用户ID
,请将接口声明为:
declare module DataModel {
interface UserDetails {
userName: string;
userId?: number;
}
}
或将属性键入为:
public userDetails: Partial<DataModel.UserDetails>;
然后将其用作:
ngOnInit() {
this.userDetails.userName = 'Guest';
}
谢谢Gregory NEUT的选择谢谢Gregory NEUT的选择。