我有以下类(class):
export interface ISimpleUser {
id: number;
full_name: string;
}
export interface IMember extends ng.resource.IResource<IMember> {
id: number;
project: number;
user: number|ISimpleUser;
skills: ISkill[];
about: string;
accepted: Boolean;
updated: Date;
created: Date;
}
有时我想遍历一组成员,如下例所示:
return angular.forEach<resources.IMember>(this.project.members,
(member: resources.IMember) => {
return member.user.id == user.id;
}).length > 0;
但是我得到这个错误:
error TS2339: Property 'id' does not exist on type 'number | ISimpleUser'
不知 Prop 体是什么问题。我看到代码的其他部分使用联合类型。
谢谢。
最佳答案
您需要进行一些类型检查和强制转换来处理这种情况:
(member: resources.IMember) => {
return member.user.id == user.id;
if (typeof (member.user) === 'number') {
return member.user == user.id;
} else {
return (<ISimpleUser>member.user).id == user.id;
}
}).length > 0;
仅仅因为您在代码/设计时知道可能的类型并不意味着编译代码在运行时知道类型。因此,您可以检查 member.user
的类型,看它是否是一个数字,然后有条件地进行比较。
关于 typescript 联合类型不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621139/