typescript - 检查 TypeScript 中是否存在内置类型?

标签 typescript global-variables

我需要确定编译代码运行的环境是否定义了 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
    // ...
}

关于typescript - 检查 TypeScript 中是否存在内置类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35020529/

相关文章:

angular - 我有两个按钮,我需要在 Ionic 中更改两个按钮中的任何一个的颜色

javascript - 使用 typescript 定义 Angular Directive(指令)的最简单方法和示例

php - 无法访问函数内部的全局变量

javascript - Webpack 中的 "Import a global variable"

javascript - 脚本.js :10 Uncaught ReferenceError: serachFor is not defined

typescript - 什么是 typescript 类型?

reactjs - 使用 div React useRef 钩子(Hook), typescript ?

Angular ActivatedRoute 数据返回一个空对象

mysql - 在mysql中制作全局自动递增数字的最简单方法

java - 如何在两个不同的方法中使用相同的变量而不将这些变量设为全局变量?