typescript 如何创建一个泛型instanceof函数,如果对象是该类型的示例,它将返回该对象?

fdbelqdn  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(126)

我基本上是想写一个这样的函数:

function isInstance<T>(s: T): T | boolean {
  return (s instanceof T) && s;
}

其中,如果是示例,则返回该类型的值,否则返回false。
但是,当我试图编译这个时,我得到了以下错误:
'T' only refers to a type, but is being used as a value here.
然而,我有点困惑,因为我想知道它是否是那种类型,所以我觉得在那里传递一个T是有意义的。我认为问题是因为TypeScript类型在运行时不存在,所以这不会起作用,但我不确定是否有替代方法会起作用。

vh0rcniy

vh0rcniy1#

我在谷歌上搜索了一下,发现了这个。不确定它到底是怎么工作的,但看起来很有效?

type Constructor<T> = new (...args: any[]) => T;

function isInstance<T>(s: any, t: Constructor<T>) {
  return s instanceof t && s;
}

相关问题