Оговорка 2: keyof {[x:string]:string} — это строка | число

type A = {[x:string]:string} 
type B = keyof A // string | number
//   ^?

const A:A = {a:"abc",[1]:"xyz"}

type C = keyof A & string // string
//   ^?
Вход в полноэкранный режим Выйти из полноэкранного режима

playground

обычно это не вызывает никаких проблем, потому что числовой ключ в javascript будет преобразован в строковый.

Однако это может вызвать проблему, если мы делаем некоторые манипуляции с типами.

Чтобы решить эту проблему, мы можем пересечь его со строкой или установить keyofStringsOnly в true в конфигурации ts

или просто использовать Record<string, T> / {[x in string]: T}

это работает как ожидалось

подробнее на github PR и в примечании к релизу

Оцените статью
devanswers.ru
Добавить комментарий