С JavaScript Flow, как ограничить допустимые значения для ключей типа? - PullRequest
0 голосов
/ 22 апреля 2020

Что следует поставить вместо ???, чтобы сработало следующее:

type Product = {
    id: number,
    name: string;
}

const foo: ??? = 'id' // works
const bar: ??? = 'name' // works
const baz: ??? = 'someField' // FAIL!

1 Ответ

3 голосов
/ 22 апреля 2020

Вы можете использовать $Keys тип утилиты , который будет извлекать все ключи из типа и создавать их объединение.

type Product = {
    id: number,
    name: string;
}

const foo: $Keys<Product> = 'id' // works
const bar: $Keys<Product> = 'name' // works
const baz: $Keys<Product> = 'someField' // FAIL!

См. Живой пример

В действительности $Keys<Product> совпадает с "id" | "name", но динамически рассчитывается на основе свойств, присутствующих в Product , Вы также можете извлечь тип, если хотите многократно использовать его:

type ValidKey = $Keys<Product>

const foo: ValidKey = "id"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...