打字稿+ keyof。声明对象转换
Typescript + keyof. Declaring an object transformation
我正在尝试理解 keyof。
我想描述一个接收对象 { a : 1, b : 'anything'}
并且应该 return 类似 { a: true , b: false }
的函数(相同的键,但始终是布尔值)。
但是当我写(例子)
function fn<K>(obj:K) : { [param:keyof K] : boolean } { /* ... */ }
... TS 说我 param
必须是字符串或数字。
这是有道理的,因为 K 可以是地图。我怎样才能避免这个错误?我怎么能声明 K 是一个普通的 JS 对象(所以它的键总是字符串)? K extends {}
不起作用。
应该是:
function fn<K>(obj: K): { [P in keyof K]: boolean } { /* ... */ }
如图mapped types section of the keyof feature.
我正在尝试理解 keyof。
我想描述一个接收对象 { a : 1, b : 'anything'}
并且应该 return 类似 { a: true , b: false }
的函数(相同的键,但始终是布尔值)。
但是当我写(例子)
function fn<K>(obj:K) : { [param:keyof K] : boolean } { /* ... */ }
... TS 说我 param
必须是字符串或数字。
这是有道理的,因为 K 可以是地图。我怎样才能避免这个错误?我怎么能声明 K 是一个普通的 JS 对象(所以它的键总是字符串)? K extends {}
不起作用。
应该是:
function fn<K>(obj: K): { [P in keyof K]: boolean } { /* ... */ }
如图mapped types section of the keyof feature.