項目24 型推論に文脈がどう使われるか理解する
TyepScirptは値だけに基づいて型推論するのではなく、値が出現する文脈も考慮して推論している
JavaScriptではコードの動作を変えることなく、四季を分解することができる
インライン式
code:js
setLanguage('JavaScript');
参照形式
code:js
let language = 'JavaScript';
setLanguage(language);
上記のコードをTyepScirptでも再現できるが、内容によっては型エラーが発生する
code:ts
type Language = 'JavaScript' | 'TypeScript' | 'Python';
function setLanguage(language: Language) { /* ... */ }
setLanguage('JavaScript'); // OK
let language = 'JavaScript'; // string型として認識される
setLanguage(language); // 型エラー
上記のコードの問題点は、変数languageが使われる文脈から切り離されていること
改善するには、const 文脈を使用する
code:ts
let language = 'JavaScript' as const; // "JavaScript"型として正確な型が付与される
setLanguage(language); // OK
const 文脈は、文脈が失われた状況での推論に関する問題はうまく解決できるが、欠点がある
変数宣言時に何らかのミスをした場合(タプルに異なる要素数を指定した)、エラーが宣言箇所ではなく、利用箇所で発生する
特に深くネストしたオブジェクトの中にミスがある場合は、特定が難しいケースが有る
型アノテーションを減らすために、インラインで値を使うのが実用的な場合、const 文脈は有効