如何检查对象的类型是否为类?

塞夫·里德

我正在尝试检查对象的类型是否是类,是否是任何类。

这是我尝试过的:

export type IsClass<T> = (
    T extends ({new (...args: any[]): any}) ? true : false
)
class SomeClass {}
const a: IsClass<number> = false;
const b: IsClass<SomeClass> = false;
const c: IsClass<({new(): any})> = true;

最后我检查了一下,无法判断一个类型是对象还是类,但我找不到与之相关的 Typescript 问题。

如何检查对象的类型是否为类?


奖励:这是如何使用实际代码检查它。它不会转化为类型逻辑。

function isClass(target: any) {
  return typeof target === "object" && (/^(object|array)$/i.test(target.constructor.name) === false)
}

据我所知,Typescript 知道对象和类之间的区别......有点:

const a = {};
class B{};
const testA = new a();  //error: This expression is not constructable.
const testB = new B();

但我想它不能说 testB 是一个类对象。

维尔俄罗斯

Typescript 有两个独立的命名空间。一种用于代码,一种用于类型。在代码级别不可能没有类。类型仅在编译时进行分析。这是因为 Typescript 是 Javascript 的超集。所以没有像 Java 这样的东西,你有一个反射 API 来检查类型结构。

你的根本问题是什么?你的目标是什么?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章