項目5 any型の使用を制限する
anyは型安全ではない
as anyなどanyを使うと型チェッカーの利点が失われてしまう
code:ts
let ageInYears: number
ageInYears = '12' as any // 代入できてしまう
anyは契約を破棄する
ある型を受け取り、ある型を返すという契約がある関数にany型を持ち込むと、その契約が破棄されてしまう
code:ts
function calculateAge(birthDate: Date): number {
// ...
}
let birthDate: any = '1990-01-19';
calculateAge(birthDate); // OK
anyは言語サービスのサポートを受けられない
具体的な型を使うと、TypeScriptの言語サービス(VSCodeなどのエディタ向けに、ユーティリティ機能を提供するプログラム)による補完などのサポートを受けれる オートコンプリートやドキュメント表示機能
シンボルの名前変換
any型をつかうとこのサポートを受けれない
any型はリファクタリングに伴うバグを見つけづらくする
具体的な型ではなくany型を使っていると、型エラーは解消されたが、実行時に想定外の値が入ってきてエラーが発生するなどリファクタリングによって予想外の挙動を生んでしまう可能性がある
anyは型設計を隠蔽する
クリーンで理解しやすいコードを書くには型設計が重要だが、anyを使うと型設計が暗黙的になり、設計の意図を伝えることができなくなる
コードの読み手は、型設計を理解するためにコードを詳細に把握する必要が生まれる
anyは型システムの信頼性を損なう
型システムがあることによって、プログラムの信頼性が高まる
any型を使うことで、実行時にTypeScriptが検出しなかったエラーが発生するとその信頼が損なわれる
any型がたくさんあるTypeScriptは型のないJavaScriptよりも扱いづらくなる可能性がある
型エラーの修正や、頭の中で実際の型を把握しておく必要が生まれるため