我需要确定编译代码运行的环境是否定义了 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
// ...
}
关于typescript - 检查 TypeScript 中是否存在内置类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35020529/