首页 > 解决方案 > 打字稿:如何将项目添加到元组?

问题描述

为什么这会产生错误“剩余元素类型必须是数组类型。”?

type QWE<T extends [number, string]> = [boolean, ...T]
                                                 ^^^^ the error is here

标签: typescripttypescript-typings

解决方案


如果有人觉得它有用,这是提香类型的一个版本,改进涵盖了更多情况:

type R = TupleUnshift<boolean, [number, string]> // [boolean, number, string]


type TupleUnshift<A, B extends [...any[]]> = ((a: A, ...r: ForcedTuple<B>) => void) extends (...a: infer R) => any ? R : never

type ForcedTuple<T> =
    T extends [
        infer A,
        infer B,
        infer C,
        infer D,
        infer E,
        infer F,
        infer G,
        infer H,
        infer I,
        infer J,
        infer K,
        infer L,
        infer M,
        infer N,
        infer O,
        infer P,
        infer Q,
        infer R,
        infer S,
        infer T,
        infer U,
        infer V,
        infer W,
        infer X,
        infer Y,
        infer Z
    ]
    ?
    [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z]
    : T

推荐阅读