typescript-lodash icon indicating copy to clipboard operation
typescript-lodash copied to clipboard

ChainedAccessUnion查找可读路径

Open jile1997 opened this issue 1 year ago • 1 comments

ChainedAccessUnion查找可读路径,如果对象里面某个key的值为数组,会把数组的方法也当成联合类型

jile1997 avatar Jan 30 '24 07:01 jile1997

理论上,数组的方法也是可以访问的,如果你需要移除数组的方法,再生成"可读路径"类型,可以先将数组类型转为"类数组"类型

type TransformArrayToArrayLikeDeep<T> = T extends object ? {
    [Key in keyof T]: T[Key] extends Array<any> ? {
        [ArrKey in keyof T[Key] as ArrKey extends 'length' | `${number}` ? ArrKey : never]: TransformArrayToArrayLikeDeep<T[Key][ArrKey]>
    } : TransformArrayToArrayLikeDeep<T[Key]>
} : T

然后,

interface YourObject {
    a: 1,
    b: 2,
    c: [{ d: [1] }, 2, 3]
}
// "a" | "b" | "c" | "c.length" | "c.0" | "c.1" | "c.2" | "c.0.d" | "c.0.d.length" | "c.0.d.0"
type Result = ChainedAccessUnion<TransformArrayToArrayLikeDeep<YourObject>>

kawayiLinLin avatar Jan 31 '24 01:01 kawayiLinLin