与条件泛型和数组相关的唯一Typescript语法

时间:2019-01-28 16:58:50

标签: typescript typescript-generics

我偶然发现了某种Typescript语法,这使我感到困惑。这是Typescript团队成员编写的两个示例。

示例1

type BoxedArray<T> = { array: T[] };
type Boxed<T> = T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>;
type T21 = Boxed<number[]>;  // BoxedArray<number>;

source

这是我天真地阅读它的方式:

// Boxed receives a type parameter - T = number[]
// Boxed passes BoxedArray an Array of T
// Therefore type T21 = BoxedArray<number[][]>

示例2

type DeepReadonly<T> =
    T extends any[] ? DeepReadonlyArray<T[number]> :
    T extends object ? DeepReadonlyObject<T> :
    T;

interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {}

source

我知道此语法与推断有点相似。我已经在这里和那里看到了,但是我仍然不太了解其结构,也找不到有关它的信息。

1 个答案:

答案 0 :(得分:1)

类型T[K]lookup type,意味着T[K]是键TK的属性值的类型。 (请注意,T[K]不是T[]。)如果T具有数字索引签名(如数组),则T[number]是存储在{{1}上的属性的类型}的数字索引。具体来说,如果TT,则Array<X>T[number]。 (这确实导致看起来混乱的Xstring[][number]相同)。希望能有所帮助。祝你好运!