对象的键是数组之一

时间:2019-11-01 14:26:46

标签: typescript typescript-typings

如何保留返回对象的键由传入数组设置

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'.

1 个答案:

答案 0 :(得分:1)

使用额外的类型参数U破坏了这里的内容。首先,U = { [K in T]?: boolean }为类型参数U定义了一个默认值,但没有以任何方式约束U,因此它可以是任何类型,因此在函数ts中不能真正说出{ {1}}。您可以直接使用映射类型,而无需使用额外的类型参数:

U

play