有没有办法要求函数参数是类型参数的构造函数?

时间:2016-08-27 03:17:36

标签: typescript

有没有办法写这个:

foo<T>(bar: ConstructorOf<T>): T

所以这段代码是合法的:

class Baz {}

foo(Baz); // type param T infered to be Baz

1 个答案:

答案 0 :(得分:2)

这是你在找什么?

class Baz {
  isBaz = true;
}

function foo<T>(c : {new(): T;}): T {
  return new c;
}

console.log(foo(Baz).isBaz); // ok
console.log(foo(String).length); // ok
// console.log(foo(String).isBaz); // error: property isBaz does not exist in type String

此代码是https://www.typescriptlang.org/docs/handbook/generics.html中最后一个主题的简化示例。