我试图了解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 {}
无效。
答案 0 :(得分:2)
应该是:
function fn<K>(obj: K): { [P in keyof K]: boolean } { /* ... */ }
如mapped types的keyof feature部分所示。