インターフェイスで宣言されているプロパティのタイプを変更することはできますか?私は言葉でこれを説明する方法を知らないので、ここでは私がしようとしている単純な例がうまくいかない:TypeScript宣言のマージ - プロパティタイプの変更
Movie
名前空間は、
私のアプリケーションでは、私のキャラクターがスーパーの友達と一緒にスーパーになるようにします。だから、私は自分のタイピングでこれを実行しようとしました:活字体は私がSuperCharacter
でfriend
プロパティタイプを上書きすることはできませんので、定義によってSuperCharacter
があるにもかかわらず、しかし動作しません
declare namespace Movie {
interface Character {
doAnExtraThing(): Promise<void>; // OK to add a new method
nickname: string; // OK to add a new property
friend: SuperCharacter; // NOT OK to override type with a subtype
}
interface SuperCharacter extends Character {
doSomethingSuper(): Promise<void>;
}
}
a Character
。活字体は、このエラーで文句を言う:
[ts] Subsequent variable declarations must have the same type. Variable
'friend' must be of type 'Character', but here has type 'SuperCharacter'.
私はSuperCharacter
を持っていることによって、私はこの問題を持っていないだろうが、私は、元Character
インタフェースを拡張することを期待していました。
私が達成しようとしていることは間違いないでしょう。それを行う方法はありますか?
残念ながら、これは私のユースケースでは動作しません。私は元の投稿で言ったように、_私のキャラクターがSuper friends_でスーパーキャラクターになりたいのです。つまり、 'const character = new Character()'、 'character.doSomethingSuper()'または 'character ' friend.doSomethingSuper() ' – Merott
そのような状況では、 'const character = new SuperCharacter()'で始まるスーパーキャラクターをインスタンス化する必要があります。 'doSomethingSuper()'のような子クラスのメソッドは、親には決して現れません! – fny
インスタンスの作成方法を制御できません。私の質問は、具体的にどのように宣言のマージを介して既存のインターフェイス上のプロパティのタイプを新しい***互換性のある***型(サブタイプの場合のように)に変更するかについてです。インターフェイスに新しいプロパティを追加することは可能ですが、新しいタイプが元のタイプと互換性がある場合でも、プロパティのタイプを変更することはできないようです。 – Merott