Arrays 合并两元组类型?(例如,将[any]和[any,any]合并到[any,any,any])

Arrays 合并两元组类型?(例如,将[any]和[any,any]合并到[any,any,any]),arrays,typescript,types,Arrays,Typescript,Types,有三种类型 如何合并A和B 打字稿:3.6.3 类型A=[任何] 类型B=[任何,任何] C类=[任何,任何,任何] 是否有某种方法可以合并[any]和[any,any]?我假设您希望能够获取两个元组类型并在类型系统中连接它们,以便类型Concat的计算结果为[1,2,3,4,5,6]。TypeScript类型系统中没有内置任何东西允许您执行此操作。您可以自己编写接近的东西,但需要一个简单的递归定义 有一个名为的库,它使用一些递归类型来创建。这些递归类型显然要么得到TypeScript的支持

有三种类型

如何合并
A
B

打字稿:3.6.3

类型A=[任何]
类型B=[任何,任何]
C类=[任何,任何,任何]

是否有某种方法可以合并
[any]
[any,any]

我假设您希望能够获取两个元组类型并在类型系统中连接它们,以便类型
Concat
的计算结果为
[1,2,3,4,5,6]
。TypeScript类型系统中没有内置任何东西允许您执行此操作。您可以自己编写接近的东西,但需要一个简单的递归定义


有一个名为的库,它使用一些递归类型来创建。这些递归类型显然要么得到TypeScript的支持,要么很快就会得到支持,如ts工具带库


如果您不想使用库,有不同的方法可以继续。我使用一些类型操作和一个小程序来输出冗长的部分,构建了以下支持长度为30左右的元组的东西:

type Add = [['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['20', '21', '22', '23', '24', '25', '26', '27', '28', '29'], ['21', '22', '23', '24', '25', '26', '27', '28', '29'], ['22', '23', '24', '25', '26', '27', '28', '29'], ['23', '24', '25', '26', '27', '28', '29'], ['24', '25', '26', '27', '28', '29'], ['25', '26', '27', '28', '29'], ['26', '27', '28', '29'], ['27', '28', '29'], ['28', '29'], ['29']];
type Sub = [['0'], ['1', '0'], ['2', '1', '0'], ['3', '2', '1', '0'], ['4', '3', '2', '1', '0'], ['5', '4', '3', '2', '1', '0'], ['6', '5', '4', '3', '2', '1', '0'], ['7', '6', '5', '4', '3', '2', '1', '0'], ['8', '7', '6', '5', '4', '3', '2', '1', '0'], ['9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['22', '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['23', '22', '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['24', '23', '22', '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['25', '24', '23', '22', '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['26', '25', '24', '23', '22', '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['27', '26', '25', '24', '23', '22', '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['28', '27', '26', '25', '24', '23', '22', '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], ['29', '28', '27', '26', '25', '24', '23', '22', '21', '20', '19', '18', '17', '16', '15', '14', '13', '12', '11', '10', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0']];
type Tup = [[], [0], [0, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
type Idx<T, K, N = never> = K extends keyof T ? T[K] : N;
type Concat<T extends readonly any[], U extends readonly any[]> =
    T extends any ? U extends any ?
    Tup[Add[T["length"]][U["length"]]] extends infer V ?
    { [K in keyof V]: Idx<T, K, Idx<U, Idx<Sub, K>[T["length"]]>> } :
    never : never : never
所以我会在使用前仔细测试


好吧,希望这会有帮助;祝你好运


您的问题不太清楚。你能补充更多细节吗?提供一个完整的示例,说明您希望如何使用它可能会有所帮助。
type Six = Concat<[1, 2, 3], [4, 5, 6]>
// type Six = [1, 2, 3, 4, 5, 6]

type Union = Concat<["a"] | [1, 2], ["b"] | [3, 4]>
// type Union = ["a", "b"] | ["a", 3, 4] | [1, 2, "b"] | [1, 2, 3, 4]
type Oops = Concat<readonly [1?], [2, 3, ...string[]]>;
// type Oops = [] | [1 | undefined] | [1 | undefined, 3 | 2] | 
// [1 | undefined, 3 | 2, 3] | [1 | undefined, 3 | 2, 3, never] |
// [1 | undefined, 3 | 2, 3, never, never] | 
// [1 | undefined, ... 4 more ..., never] | ... 22 more ... | [...]