提问人:laoguang 提问时间:8/30/2023 最后编辑:laoguang 更新时间:11/23/2023 访问量:34
TypeScript:实现泛型类型约束函数以实例化和返回特定类型的实例
TypeScript: Implementing a generic type-constrained function to instantiate and return instances of a specific type
问:
我想实现一个具有以下行为的函数:
GetComponent<T>(type : typeof T): T { ... }
我希望这个函数接受一个构造函数作为参数,其中构造函数的类型是 T,并返回一个 T 类型的实例。
此外,如果提供的类型不匹配,我希望该函数导致编译错误。(如)。GetComponent<Vec2>(Vec3)
是否可以实现此功能?
如果有什么方法可以禁止抽象类型输入?
我尝试过这样的事情:
class Resources {
static Load<T extends AssetObject>(type: typeof AssetObject, id: string): T {
return Resources.load_sync_impl(id, type) as T;
}
}
但是当我尝试编写 List 时,我找不到任何方法可以将输入参数限制为我在类中定义的类型:
class List<T> {
constructor(type: any) { <<======= i had to write it as any so it can support the private constructor class
this._type = type;
}
}
旧的解决方案是这样的
constructor(type: new (...args: any[]) => T);
答:
0赞
laoguang
11/23/2023
#1
我终于找到了这个问题的答案,就是这样
type Traits_Constructor<T> = T extends Function ? Function : (Function & { prototype: T });
并直接使用这个特性,然后问题 sloved!
GetComponent<T extends Component>(type: Traits_Constructor<T>): T;
评论
<<===
...
Vec2
AssetObject