如何覆盖user.profile类型?

时间:2016-07-04 10:25:27

标签: meteor typescript

meteor-typescript's definition file中,user.profile对象的输入为any

用于扩展用户对象和更改配置文件类型的Typescript方法是什么?

我试过

interface IMyUserProfile {
  foo: boolean;
}

namespace Meteor {
  export interface User: {
    profile: IMyUserProfile
  }
}

但是TS只是说“重复标识符”。

我知道我可以直接在定义文件中更改它,但出于显而易见的原因,我宁愿不这样做。

1 个答案:

答案 0 :(得分:0)

Typescript支持declaration merging,但是如果你添加一个尚未到位的属性,那将会奏效,例如:

namespace Meteor {
    export interface User {
        newPropertry: any;
    }
}

但是由于User接口已经有profile,编译器会抱怨它。

你能做的是:

namespace Meteor {
    export interface MyUser extends User {
        profile: IMyUserProfile;
    }
}

然后将您拥有的用户实例强制转换为Meteor.MyUser 您当然可以从Meteor命名空间中删除它:

export interface MyUser extends Meteor.User {
    profile: IMyUserProfile;
}