Клавиша Typescript с массивом объектов - PullRequest
0 голосов
/ 21 мая 2018

Я очень новичок в машинописи и с трудом нахожу обширную документацию по 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?
}

Какой тип вы получите для B или C?Я надеюсь получить тип из keyof, который будет name | val | active.Я ищу подход, который выглядит как B, C или что-то совершенно другое?

В качестве альтернативы есть простой способ печати типов из keyof?Это позволило бы мне понять это.

1 Ответ

0 голосов
/ 21 мая 2018

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 просто означает «проверьте, что эта реализация присваивается интерфейсу» и фактически не устанавливает типы классов по умолчанию.Это означает, что вам все равно придется делать B: "name" | "val" | "active", если вы хотите.Вы также можете просто сделать B: "name", так как этот тип присваивается типу объединения всех ключей.

...