首页 > 解决方案 > 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;

有什么建议么?

标签: typescriptgenerics

解决方案


您需要创建一个映射类型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;

操场


推荐阅读