2017-02-06 11 views
0

im пытается понять keyof.Typcript + keyof. Объявление преобразования объекта

Я хочу описать функцию, которая получает объект { a : 1, b : 'anything'} и должна возвращать что-то вроде { a: true , b: false } (те же ключи, но всегда логические значения).

Но когда я пишу (пример)

function fn<K>(obj:K) : { [param:keyof K] : boolean } { /* ... */ } 

... TS говорит мне param должен быть строкой или числом.

Это имеет смысл, поскольку K может быть картой. Как я мог избежать этой ошибки? Как я могу объявить, что K является простым JS-объектом (поэтому его ключи всегда являются строками)? K extends {} не работает.

ответ

2

Это должно быть:

function fn<K>(obj: K): { [P in keyof K]: boolean } { /* ... */ } 

Как показано на mapped types секции keyof feature.

 Смежные вопросы

  • Нет связанных вопросов^_^