带有通用参数的打字稿工厂
Factory in typescript with a generic argument
我正在尝试在打字稿中实现一个 returns 通用类型的工厂。
已经发现我需要将类型作为第一个参数传递,并将其类型设置为 CTOR 签名(本例中为 new () => T
)。
当我想将通用类型传递给工厂时,问题就开始了——我收到一条错误消息:
Value of type 'typeof G' is not callable. Did you mean to include 'new'?(2348)
.
有什么办法可以实现吗?
这里是问题的简化版本:
// Generic class
class G<T>{}
// Standard non generic
class B{}
function make<T>(t: new () => T){
return new t()
}
// Works
make(B)
// Value of type 'typeof G' is not callable. Did you mean to include 'new'?(2348)
make(G<number>)
Typescript playground link 到上面的代码。
您的问题是您将泛型设置在了错误的位置。在 make(value)
中,value
应该是没有任何 TypeScript 定义的可运行代码。所以调用 make(G<number>)
是错误的,因为你不能调用 TypeScript 泛型作为参数。
定义泛型需要写在括号前:
make<G<number>>(G)
所以在这里,G<number>
是您提供的类型,G
是 'valid' 可运行代码。
看看playground。
我正在尝试在打字稿中实现一个 returns 通用类型的工厂。
已经发现我需要将类型作为第一个参数传递,并将其类型设置为 CTOR 签名(本例中为 new () => T
)。
当我想将通用类型传递给工厂时,问题就开始了——我收到一条错误消息:
Value of type 'typeof G' is not callable. Did you mean to include 'new'?(2348)
.
有什么办法可以实现吗?
这里是问题的简化版本:
// Generic class
class G<T>{}
// Standard non generic
class B{}
function make<T>(t: new () => T){
return new t()
}
// Works
make(B)
// Value of type 'typeof G' is not callable. Did you mean to include 'new'?(2348)
make(G<number>)
Typescript playground link 到上面的代码。
您的问题是您将泛型设置在了错误的位置。在 make(value)
中,value
应该是没有任何 TypeScript 定义的可运行代码。所以调用 make(G<number>)
是错误的,因为你不能调用 TypeScript 泛型作为参数。
定义泛型需要写在括号前:
make<G<number>>(G)
所以在这里,G<number>
是您提供的类型,G
是 'valid' 可运行代码。
看看playground。