打字稿联合类型不起作用

Bog*_*suc 7 types typescript typescript1.4

我有以下课程:

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;
}
Run Code Online (Sandbox Code Playgroud)

在某些时候,我想迭代成员的arroy,如下例所示:

        return angular.forEach<resources.IMember>(this.project.members,
            (member: resources.IMember) => {
                return member.user.id == user.id;
            }).length > 0;
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

error TS2339: Property 'id' does not exist on type 'number | ISimpleUser'
Run Code Online (Sandbox Code Playgroud)

不知道到底出了什么问题.我看到代码的其他部分使用了union类型.

谢谢.

Bro*_*cco 6

您需要进行一些类型检查和转换来处理这种情况:

(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;
Run Code Online (Sandbox Code Playgroud)

仅仅因为您知道代码/设计时可能的类型并不意味着编译代码在运行时知道类型.因此,您可以检查类型member.user是否为数字,然后有条件地进行比较.