[英]Check if a built-in type exists in TypeScript?
我需要確定我的編譯代碼運行的環境是否定義了Reflect
對象和Reflect.getMetadata
方法。 事先不知道編譯代碼將在何處運行。 它可以是瀏覽器,nodeJS或任意V8JS運行時環境。
我正在檢查已知全局對象的屬性,但這很糟糕:
if (
typeof ((window || global) as any).Reflect === "object" &&
typeof ((window || global) as any).Reflect.getMetadata === "function"
) {
// the Reflect.getMetadata method is defined
// ...
}
是否有更優雅和防彈的方式來檢查這些物體的存在? 如果我只是檢查是否存在Reflect
TypeScript會拋出錯誤。
典型。 花費大量時間尋找問題的解決方案,最終在StackOverflow上尋求幫助,然后在問題發布之前找到解決方案。 無論如何,我會把它留在這里以防萬一其他人遇到這個。
在TypeScript中,可以使用declare
關鍵字聲明存在可能存在的類型:
declare abstract class Reflect {
public static getMetadata(metadataKey: any, target: Object, targetKey: string | symbol): any;
}
之后,編譯器(通過它,IntelliSense)很樂意接受Reflect
和Reflect.getMetadata
作為現有對象,之后可以以一種漂亮和干凈的方式檢查它們的運行時類型:
if (typeof Reflect === "object" && typeof Reflect.getMetadata === "function") {
// the Reflect.getMetadata method is defined
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.