typescript - Typescript:使用泛型数组按照泛型列表的顺序创建具有泛型的对象数组
问题描述
我想创建一个具有无限泛型类型列表和一个参数的类,该参数是另一个具有泛型的类的数组。
数组里面类的泛型应该按照主类的泛型列表的顺序。
class OtherClass<T> {
public readonly something: T
}
class Class<T extends any[]> {
public readonly parameter: [OtherClass<T[0]>, OtherClass<T[1]>, ...]
}
例子:
const c = new Class<[string, number]>();
// should be string
c.parameter[0].something;
// should be number
c.parameter[1].something
const c1 = new Class<[number, string, SomeClass, someOtherClass]>();
// Should be number
c1.parameter[0].something;
// Should be string
c1.parameter[1].something;
// Should be SomeClass
c1.parameter[2].something;
// Should be SomeOtherClass
c1.parameter[3].something;
有什么建议么?
解决方案
您需要创建一个映射类型,T
其中数组的索引是键,值是包装该索引处的条目的类。
class Class<T extends any[]> {
public readonly parameter: {
[Index in keyof T]: OtherClass<T[Index]>
}
}
现在其余的工作就像你期望的那样:
const c = new Class<[string, number]>();
const a1: string = c.parameter[0].something;
const a2: number = c.parameter[1].something;
const c1 = new Class<[number, string, SomeClass, SomeOtherClass]>();
const b1: number = c1.parameter[0].something;
const b2: string = c1.parameter[1].something;
const b3: SomeClass = c1.parameter[2].something;
const b4: SomeOtherClass = c1.parameter[3].something;
推荐阅读
- google-cloud-platform - 从永久性磁盘到 Google 存储桶的同步速度很慢
- javascript - 嘿,谁能告诉我为什么我不从 api 渲染数据
- lotus-domino - 如何防止浏览器暴露 Notes 视图
- java - 杰克逊的@JsonPropertyOrder 不适用于@JsonUnwrapped
- r - R 并行作业挂起
- vhdl - 我可以在多个模块实例上以别名聚合信号吗?
- java - 使用 Java HttpClient 的持久连接(保持活动状态)
- c# - 当另一个用户打开事务时在数据库上添加表
- node.js - Node Express 强制所有静态路由指向根路径
- python - 按列的唯一值绘制