## やりたいこと
たとえば以下の`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型]]になってしまう。