項目44 anyをそのまま使うのではなく、より具体的な形式で使う
any型はJavaScriptで表現できるすべての値を内包できるため、使う際はもっと具体的な型で表現できないか考える
これは❌️
code:ts
function getLengthBad(array: any) {
return array.length;
}
これはまだ⭕️
code:ts
function getLength(array: any[]) {
return array.length;
}
戻り値の型がnumberで推論される
パラメータが2次元配列であることを期待するが、要素の型にこだわらない場合はany[][]が使える
オブジェクトを期待しつつも、どんな値かわからない場合は、{[key: string]: any}またはRecord<string, any>が使える
code:ts
function hasAKeyThatEndsWithZ(o: Record<string, any>) {
for (const key in o) {
if (key.endsWith('z')) {
return true;
}
}
return false;
}
関数型を期待する場合でも、anyをそのまま使うのは避ける
下記のように少しでも具体的な形式で利用する
code:ts
type Fn0 = () => any; // パラメーターなしで呼べるすべての関数
type Fn1 = (arg: any) => any; // パラメーターが1つの場合
type FnN = (...args: any[]) => any; // パラメーターの数がいくつでもいい場合
// Function型と同じ