投稿日:
引き続きこの書籍を読んでいる。
Effective TypeScriptの読書メモ。
英語の直訳からか難解な日本語が多いのでAIの解説が多いに役立つ。 「追加のプロパティを持つ値も型の集合に含まれる」という文章の解釈が難しかったのでAIに解説してもらったら納得。 以下にまとめておく。
ソースコードで書くと以下のような意味だそうだ。
type Person = {
name: string;
age: number;
};
const alice: Person = {
name: 'Alice',
age: 30,
location: 'Tokyo', // これはエラーになる
};
// これはエラーにならない
const personWithExtra = {
name: 'Bob',
age: 24,
location: 'Toyama',
};
const bob: Person = personWithExtra;
TypeScriptは「必要なプロパティがすべて存在していれば、それ以外の追加プロパティがあっても問題ない」と認識する。これがこの記事のタイトルの「追加のプロパティを持つ値も型の集合に含まれる」の意味である。
ただし、これには例外がある。
- オブジェクトリテラルを直接代入する場合は、余分なプロパティチェックが働いてエラーになる。
- 変数に一度代入してから他の変数に代入する場合は、チェックが緩和される。
これは「構造的型付け」と呼ばれるTypeScriptの特性に基づいている。
必要な構造(プロパティ)を持っていれば、それ以上のものを持っていても型として適合すると見なす。