我遇到了一种情况,我想在一组接口中使用泛型类型。我的公共接口接收通用类型并将其传递给非导出的私有接口。在我的公共接口中,我想使用泛型类型T,但我不希望它引用的实例T。我想让它说它是T,这个类,可以生成 的实例T。
尝试这个,我得到一个错误:
interface Car<T> {
unit: T;
progress: number;
}
export interface CarFactory<T> {
cars: Car<T>[];
// Type error: 'T' only refers to a type, but is being used as a value here. TS2693
blueprint: typeof T;
}
Run Code Online (Sandbox Code Playgroud)
使用生成器函数是可行的。但随后我必须将其传递下去并暴露更多代码的内部结构,这是我想避免的。
interface CarFactory<T> {
blueprint: (args: any) => T;
}
Run Code Online (Sandbox Code Playgroud)
我不能T直接使用,因为这会导致编译器认为它应该接收 的实例T,而不是类。这会触发TS2740错误。使用T = CarModelandT['constructor']作为blueprint类型有效,但前提是我像这样修补我的类:
class CarModel {
public …Run Code Online (Sandbox Code Playgroud)