typescript - 从继承的类型访问泛型
问题描述
我正在尝试从另一个类访问泛型,它将作为泛型本身传递。
export default abstract class Foo<K, V> {}
import Foo from './Foo';
export default abstract class Bar<Foo> {}
我将如何去访问K
和类V
内Bar
?我想创建一个使用这些类型的抽象方法,但我不确定我将如何实际访问嵌套的泛型。
编辑:添加用例以进行更多说明
示例用例:
export default class Baz extends Foo<string, number> {}
import Baz from './Baz';
export default class Qux extends Bar<Baz> {}
我希望Bar
该类认识到Qux
应该包含泛型<string, number>
,因为我希望Bar
在签名之后有一个抽象方法
public abstract foo(thing: string): number;
举个例子。
我考虑过的另一种选择:在Baz
内部constructor
而不是作为泛型类型传递......但是,实际上仍然存在从Baz
自身获取泛型类型的问题。
编辑 2:实际用例
好的,所以我有这两个课程。
export default abstract class Storage<K, V> {
protected abstract _init(): void;
}
import Data from '../structures/bases/Data';
export default class DataStore extends Storage<string, Data> {
protected async _init(): void {
// ...
}
}
这就是问题所在
import Data from '../structures/bases/Data';
export default class DataHandler extends Handler<DataStore> {
public abstract get(key: string): Data {
//...
}
}
export default abstract class Handler<K, V> {
// my goal, where K is string and V is Data when DataStore is passed
public abstract get(key: K): V;
}
我将有几个*Handler
s 在其中将扩展的实例Storage
作为泛型传递。现在显然我不能神奇地插入K
and V
,我可以做的是 haveHandler<K, V>
然后 pass <string, Command>
,但我希望我可以简单地传递 *Storage 的实例,而不是每次都再次传递 2 种类型。
解决方案
你的定义Bar
不正确。它应该看起来像这样:
import Foo from './Foo';
export default abstract class Bar<K, V, F extends Foo<K,V>> {}
您原来Foo
是 bar 内的类型变量,而不是Foo
您想要的类。然后K
andV
被绑定到 Foo 实例的类型变量上。现在,所有类型变量都可以在您的Bar
实例中使用
这有点像怪物,但使用类型变量会很快失控。
推荐阅读
- mongodb - MongoDB - 无法在 Mongo Shell 中获取对象的键值
- vba - 文本替换后添加文件打开和文件另存为对话框
- reactjs - 如何使用反应将模态对话框置于全屏模式?
- aerospike - 使用 vagrant 安装的 aerospike 无法正常工作
- sorting - 'NoneType' 对象在 python 中不可下标
- java - 如何使用 java 在 PostgreSQL 中使用事务类型快照
- mysql - 我想知道是否有人知道如何找到最小值和最大值并找到它们之间的时间范围?
- java - UnsatisfiedLinkError libcrypto.so.1.0.0
- javascript - TypeError:无法读取未定义的属性“年份”
- c - 通过循环将数据复制到整数指针数组?