如何从条件键推断对象的值?

295

例如,我想编写一个树遍历函数:

// Pick keys from an object if the value is T[] type
type SubTreesField<T, K extends keyof T> = T[K] extends T[] ? K : never;

function traverse<T, K extends keyof T>(
  t: T,
  key: SubTreesField<T, K>,
  cb: (t: T) => void
) {
  const arr = t[key]; // The 'arr' type is T[SubTreesField<T, K>] instead of T[]
}
卡尔顿

Typescript无法T[K]根据该条件推断出的类型这太复杂了,无法弄清楚。您需要为此定义一个更明确的约束,T以便Typescript知道其外观。实际上,您根本不需要条件。尝试:

function traverse<T extends { [k in K]: T[] }, K extends keyof T>(
  t: T,
  key: K,
  cb: (t: T) => void
) {
  const arr: T[] = t[key]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章