## やりたいこと たとえば以下の`Animal`に対して ```ts interface Animal { id: string name: string } ``` `id`を`number`に変更したい。 ```ts interface Animal { id: number name: string } ``` ## 解決方法 [[Overwrite型]]を使う。 ```ts export type Overwrite<T, R> = Omit<T, keyof R> & R; type TypedAnimal = Overwrite<Animal, { id: number }> ``` ## 他に試したこと ### [[extends (JavaScript)|extends]]を使う ```ts interface ExtendedAnimal extends Animal { id: number } ``` インターフェースは拡張できないのでエラーになる。 ``` インターフェイス 'ExtendedAnimal' はインターフェイス 'Animal' を正しく拡張していません。 プロパティ 'id' の型に互換性がありません。 型 'number' を型 'string' に割り当てることはできません。ts(2430) ``` ### [[型エイリアス (TypeScript)|型エイリアス]]を使う ```ts type ExtendedAnimal = Animal & { id: number } ``` `id`は`Animal.id`と`number`の[[交差型 (TypeScript)|交差型]]になり、該当の型は存在しないため[[never型 (TypeScript)|never型]]になってしまう。