TypeScriptの型システムは構造的部分型
構造的部分型とは
型の中身(構造や定義)が等しければ他の型と同等とする型システム
型の同等性に名前や定義場所は関係しない
例
こんな感じに全く同じプロパティを持つ型が二つあった時に
code:typescript
interface User {
name: string;
}
interface Item {
name: string;
}
引数の型にUserが指定されている関数にItemを渡しても正常に処理出来る
code:typescript
const me: User = { name: 'User name' };
const item: Item = { name: 'Item name' };
// ユーザーを受け取って名前を表示する関数
const displayUserName = (user: User) => (console.log(user.name));
// User型を渡すと通る
displayUserName(me);
// 引数の型とは違うItem型を渡しても通る
displayUserName(item);
UserとItemは同じ構造をしているので,互換性があるとみなされる