タイプスクリプトの' any 'へのより安全な代替手段
5507 ワード
我々は皆そこにいた.いくつかの理由で、APIエンドポイントから期待するオブジェクトの型を確認できません.APIはまだ定義されていないかもしれません.それで、我々は何をしますか?
あなたはおそらく、このようなコードを見てきた、誰かが物事のリストになると知っていたので.
あなたはどんなタイプのオブジェクトを期待するのかわからないかもしれませんが、おそらく漠然とした考えがあります.たぶん、あなたがまだ知らないキー(文字列)を持つオブジェクトのリストになるでしょう.
その場合は次のようにします.
The
プロパティキーを持つオブジェクト型を構築する
例えば、オブジェクト
The
これは
例えば、
結論として、あなたのオブジェクトを正しくタイプすることは常に良い考えです.しかし、可能でないとき、より良い選択肢は常により安全なオプションのために行くことです.
TypeScript: Documentation - Record
TypeScript: Documentation - unknown
あなたはおそらく、このようなコードを見てきた、誰かが物事のリストになると知っていたので.
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
Reference
この問題について(タイプスクリプトの' any 'へのより安全な代替手段), 我々は、より多くの情報をここで見つけました https://dev.to/saulodias/a-safer-alternative-to-any-in-typescript-2g67テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol