如何在Typescript中声明Type类型的变量?

时间:2019-07-11 09:24:38

标签: javascript typescript

我需要存储一个类型变量,以便以后动态实例化它。现在我找不到如何声明类型Type的变量,并且由于语言名称而很难搜索。但是从我发现的结果来看,它没有任何意义,应该使用任何东西,但我不希望这样做。

简单的例子:

class Foo {}

function test(bar: ???|any) {...}

test(Foo); // just the type not an instance

1 个答案:

答案 0 :(得分:3)

Foo不能 作为类型¹传递。当您执行test(Foo)时,您确实传递了一个构造函数(即值而不是类型),并且该构造函数返回类型为Foo的对象(此处均引用值和类型)。正确的类型应该是Foo变量的类型,而不是Foo的类型(是的,那有点令人困惑²):

  function test(bar: typeof Foo) { /*...*/ }

或更明确地说,您也可以直接将其作为Foo构造函数键入:

   function test(bar: { new(): Foo; }) { /*...*/ }

¹注意:您不能传递类型,因为在代码运行时它们不存在,所以类型仅在编译时存在,而在运行时不存在。


²可能更清楚地说明一个例子:

  //            v the type  v the value
  const value: Foo = new Foo();