以下のような、オーバーライドをしようとすると
interface A { x: string y: number } interface B extends A { x: number }
以下のようなエラーメッセージが表示されました。
TS2430: Interface 'B' incorrectly extends interface 'A'. Types of property 'x' are incompatible. Type 'number' is not assignable to type 'string'.
要約すると、「もともとstring型のxにnumber型で上書きはダメだよ」みたいな感じだと思います。
目次
対処法
何はともあれ、グーグル先生に聞いたところ、以下のページが引っかかりました。
対策は以下の通り
interface A { x: string y: number } interface B extends Omit<A, 'x'> { x: number }
元のコードとの違いは、継承部分でOmit
を使ってプロパティx
を除外しているところで、プロパティx
を一旦除外して再度プロパティx
を再定義という形で対処されています。
参考ページ
Omitについては、以下の解説がシンプルでわかりやすいです。