簡體   English   中英

檢查TypeScript中是否存在內置類型?

[英]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)很樂意接受ReflectReflect.getMetadata作為現有對象,之后可以以一種漂亮和干凈的方式檢查它們的運行時類型:

if (typeof Reflect === "object" && typeof Reflect.getMetadata === "function") {
    // the Reflect.getMetadata method is defined
    // ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM