2017-02-06 74 views
0

即时通讯试图了解keyof。Typescript + 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 } { /* ... */ } 

keyof featuremapped types截面示出。