如何保留返回对象的键由传入数组设置
function f<T extends string, U = { [K in T]?: boolean }> (keys: T[]): U {
const out: U = {} as U
for (let key of keys) {
out[key] = true
}
return out
}
f(['one', 'two'])['one'] // good
f(['one', 'two'])['three'] // throws error
我收到以下错误
Type 'T' cannot be used to index type 'U'.
答案 0 :(得分:1)
使用额外的类型参数U
破坏了这里的内容。首先,U = { [K in T]?: boolean }
为类型参数U
定义了一个默认值,但没有以任何方式约束U
,因此它可以是任何类型,因此在函数ts中不能真正说出{ {1}}。您可以直接使用映射类型,而无需使用额外的类型参数:
U