1

我对打字稿很陌生,很难找到一些关于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是 the will be name | val | active。我是否正在寻找一种看起来像B,C或完全不同的方法?

或者有一种简单的方法可以打印类型keyof吗?这会让我弄清楚这一点。

4

1 回答 1

2

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

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

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

请注意,TypeScript 接口的工作方式implements仅表示“检查此实现是否可分配给接口”,并且默认情况下实际上并未设置类类型。这意味着如果您愿意,您仍然必须这样做B: "name" | "val" | "active"。您也可以这样做B: "name",因为该类型可分配给所有键的联合类型。

于 2018-05-21T17:04:50.880 回答