2016-07-04 4 views
0

meteor-typescript's definition fileでは、user.profileオブジェクトはanyとタイプされています。user.profileのタイプを上書きする方法は?

ユーザオブジェクトを拡張してプロファイルタイプを変更するTypescriptの方法は何ですか?

私は

interface IMyUserProfile { 
    foo: boolean; 
} 

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

を試みたが、TSは、単に "重複識別子" と言います。

私は定義ファイルで直接変更することができますが、明白な理由から私はそれをしたくないと思います。

答えて

0

活字体は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; 
} 
+0

右。しかしそれはちょっと残念ですが、私は宣言をマージするときにオーバーライドできるようにしたいと思っています。 –

+0

さて、(異なる署名を使って)メソッドをオーバーライドし、宣言されていない変数を追加して、ほとんどのシナリオに答える必要があります。それ以外の場合は回避する必要があります。 –

関連する問題