typescript - 使用泛型类型接口泛型类型类
问题描述
这是一个纯粹的打字稿/泛型问题。我的问题来源于 Angular/CDK (portal.d.ts):
/** Interface that can be used to generically type a class. */
export interface ComponentType<T> {
new (...args: any[]): T;
}
我正在努力解决这个问题,到目前为止还没有太多运气。从我写的测试代码可以看出问题是这样理解的:
export interface ComponentType<T> {
new (...args: any[]): T;
}
interface Bar<T> {
getData: () => T
}
class MyBooleanComponent implements Bar<boolean> {
getData(): boolean { return true; }
}
class MyGenericWrapper {
init<T>(comp: ComponentType<T>): T {
return new comp();
}
}
const wrapper = new MyGenericWrapper();
const instance = wrapper.init<boolean>(MyBooleanComponent);
(instance as Bar).getData();
可以看出,这段代码存在一些问题。
首先,MyBooleanComponent
,它不能分配给ComponentType<boolean>
。我不清楚如何判断 MyBooleanComponent` 返回布尔值?
其次,如果我(instance as Bar).getData();
对打字稿编译器不满意Bar
,它想要,(instance as Bar<boolean>).getData();
但我希望根据我如何初始化/设置整个事情,它应该有可能得到boolean
正确的?
如果我做错了什么或者试图做不可能的事情,我就不会使用。任何帮助,将不胜感激!
解决方案
我认为令人困惑的是 type T
inMyGenericWrapper
与 type T
in interface不同Bar
。您已通过以下方式将 interfaceBar
的泛型类型设置为 boolean MyBooleanComponenet
:
class MyBooleanComponent implements Bar<boolean> {
getData(): boolean { return true; }
}
asMyGenericWrapper
的泛型类型设置为MyBooleanComponent
const wrapper = new MyGenericWrapper();
const instance = wrapper.init<MyBooleanComponent>(MyBooleanComponent);
instance.getData();
推荐阅读
- c++ - C++ midfunction hook 覆盖原来的局部变量
- javascript - 将数组上传到 Firestore
- node.js - 在邮递员中使用表单数据使 req.body 为空
- spring-boot - 如何为 Spring Boot 控制器返回的生成的 Asciidoc HTML 添加样式?
- java - 从redis中获取n个key
- javascript - 云功能仅检索数据库中的第一项,而不是全部
- html - eXide 的比萨饼
- python - 将 matplotlib 图形保存为全屏
- html - 您如何根据值选择性地在 R 中使用 CSS 设置样式复选框?
- python - if else 语句追加到 for 循环中的列表