タイプスクリプトの' any 'へのより安全な代替手段


我々は皆そこにいた.いくつかの理由で、APIエンドポイントから期待するオブジェクトの型を確認できません.APIはまだ定義されていないかもしれません.それで、我々は何をしますか?
あなたはおそらく、このようなコードを見てきた、誰かが物事のリストになると知っていたので.
getData(): Observable<any[]> {
  // return this.http.get<any[]>(API_URL); // TODO: Integrate with api
  return of([]);
}
しかし、我々はそれより良いことができます.
あなたはどんなタイプのオブジェクトを期待するのかわからないかもしれませんが、おそらく漠然とした考えがあります.たぶん、あなたがまだ知らないキー(文字列)を持つオブジェクトのリストになるでしょう.
その場合は次のようにします.
getData(): Observable<Record<string, unknown>[]> {
  // return this.http.get<Record<string, unknown>[]>(API_URL); // TODO: Integrate with api
  return of([]);
}

The Record<Keys, Type> 種類
プロパティキーを持つオブジェクト型を構築するKeys とプロパティの値はType .
例えば、オブジェクト
type SkinfoldSite = 'biceps' | 'triceps' | 'subscapular' | 'suprailiac';

type SkinfoldThickness = Record<SkinfoldSite, number>;

const skinfoldThickness: SkinfoldThickness = {
  biceps: 4.41,
  triceps: 8.63,
  subscapular: 13.29,
  suprailiac: 10.14,
};

The unknown 種類
これはany しかし、それは何かをするために合法的ではないので安全ですunknown 値.最初にその型をチェックしなければなりません.
例えば、
let unknownValue: unknown;
unknownValue = 10;
unknownValue = 'height';


if (typeof unknownValue == 'string') {
  const unknownKey = unknownValue.toUpperCase();
  // Do something with unknownKey 
} else if (typeof unknownValue == 'number') {
  // Do something else
}
With unknown 型をチェックしない場合は、実行時にエラーが発生する可能性があるオブジェクトのメソッドを使用しようとしているため、型エラーが表示されます.
結論として、あなたのオブジェクトを正しくタイプすることは常に良い考えです.しかし、可能でないとき、より良い選択肢は常により安全なオプションのために行くことです.
TypeScript: Documentation - Record

TypeScript: Documentation - unknown