打字稿的关键字与对象数组

时间:2018-05-21 16:50:58

标签: arrays typescript types keyof

我对打字稿很新,很难找到关于keyof的大量文档。如果你有

export interface someClassProps<T extends object> {

    /*
        Lets assume T look is an object that looks something like:

        T = {"name": "",
             "val": NaN,
             "active": false}
    */

    A: Array<T>;            // an array of objects
    B: keyof T;             // What type is this? Is just a type of object or is it the keys of T?
    C: keyof Array<T>[0];   // Is this the keys of T?
    D: keyof Array<T>       // Is this type object?
}

您为BC获得的是哪种类型?我希望得到keyof的{​​{1}}类型。name | val | active。我在寻找一种看似BC或完全不同的方法吗?

或者,有一种简单的方法可以从keyof打印类型吗?这样我就能搞清楚这一点。

1 个答案:

答案 0 :(得分:2)

keyof为您提供给定类型的键的联合类型。例如,如果你有:

export SomeClass implements<{ name: string, val: number, active: boolean}>

...然后B将为"name" | "val" | "active"。在这种情况下,C也是"name" | "val" | "active",因为Array<T>[0]是数组的第0个元素,其中元素T只是T

请注意,使用TypeScript接口的工作方式,implements只是意味着&#34;检查此实现是否可分配给接口&#34;并且默认情况下并没有实际设置类类型。这意味着如果您愿意,您仍然需要B: "name" | "val" | "active"。您也可以执行B: "name",因为该类型可分配给所有键的联合类型。