javascript - 如何声明地图哪个 T 应该是可变参数类而 K 应该是 T 的一个实例?
问题描述
我想声明一个Map<T, K>
类型,映射中的键是类,映射的值应该是相应键的实例。例如:
class X {}
type InstanceMap = // the type that I want to declare
const map: InstanceMap = new Map();
map.set( X, new X() );
解决方案
我认为这是不可能的,它需要存在量化的泛型类型。你可以做
type InstanceMap<T> = Map<{new (): T}, T>
使用构造函数类型作为键,但这只会允许您存储特定的类(可能还有子类?),但不能存储任何类。您的代码将使用 编译const map: InstanceMap<X> = new Map();
,但map.set(Y, new Y())
会失败。
与其尝试实例化一个Map
类型,我们可以尝试提出我们自己的接口,其中存在量词被委托给各个方法:
interface InstanceMap {
set<T>(c: new () => T, i: T): void;
get<T>(c: new () => T): T | undefined;
}
这适用于set
and get
,但一旦您尝试声明forEach
或迭代器就会崩溃。
推荐阅读
- mysql - MySQL 与 Springboot 的连接
- postgresql - Postgres 约束名称需要在单个表或整个架构中是唯一的?
- php - 使用 php 创建月份作为选择标签的选项
- mongodb - Pymongo:如何检索索引在值列表中的所有行?
- cuda - cublas 函数的重叠输入和输出
- google-apps-script - 谷歌表 - range.getColumnIndex() 不起作用?
- java - 编写一个公共方法 firstFifteen(),它返回一个由 longNumber 中的前 15 个字符组成的字符串
- c++ - clang++:VS Code 调试器设置不显示变量
- python-3.x - 找到覆盖最多 x_i 的最长步行
- networking - 为什么我们在使用被动队列时需要访问中断?