例如,我想编写一个树遍历函数:
// 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] 删除。
我来说两句