代码之家  ›  专栏  ›  技术社区  ›  Matěj Pokorný

元组(rest和spread表达式)中的错误类型干扰

  •  1
  • Matěj Pokorný  · 技术社区  · 6 年前

    我正在使用typescript 3.0中的新功能(我使用的是3.1.0-dev.20180717),发现了泛型类型的奇怪行为。

    type Head<T extends any[]> = T[0];
    type Tail<T extends any[]> = ((...t: T) => 0) extends ((a: any, ...r: infer R) => 0) ? R : never;
    type Prepend<A extends any, B extends any[]> = ((a: A, ...r: B) => 0) extends ((...r: infer T) => 0) ? T : never;
    type Combine<T extends any[]> = Prepend<Head<T>, Tail<T>>
    
    type test1 = Head<[1, 2, 3, 4]>; // 1 ✔️
    type test2 = Tail<[1, 2, 3, 4]>; // [2, 3, 4] ✔️
    type test3 = Prepend<1, [2, 3, 4]>; // [1, 2, 3, 4] ✔️
    type test4 = Prepend<Head<[1, 2, 3, 4]>, Tail<[1, 2, 3, 4]>> // [1, 2, 3, 4] ✔️
    type test5 = Combine<[1, 2, 3, 4]>; // [1, ...any[]] ❌
    

    我在等,那 test5 将具有类型 [1, 2, 3, 4] 因为它和 test4 但包裹在 Combine<T> 泛型类型。我错过什么了吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Matěj Pokorný    6 年前

    好吧,那真的只是个虫子 fixed in latest build 3.1.0-dev.20180721 .