我试图得到正确的typescript类型作为点符号,但没有最深的孩子。
我在这里找到了我的解决方案的一半:但这并不包括省略最深的孩子。
下面是一个例子:
type TranslationType = {
key1: {
en: string,
}
sub: {
key2: {
en: string,
}
}
}
type PathsToStringProps<T> = T extends string
? []
: {
[K in Extract<keyof T, string>]: [K, ...PathsToStringProps<T[K]>]
}[Extract<keyof T, string>]
type Join<T extends string[]> = T extends []
? never
: T extends [infer F]
? F
: T extends [infer F, ...infer R]
? F extends string
? `${F}.${Join<Extract<R, string[]>>}`
: never
: string
let value: Join<PathsToStringProps<TranslationType> // "key1.${string}" | "sub.key2.${string}"
我得到"key1.${string}" | "sub.key2.${string}"
,但我希望它是"key1" | "sub.key2"
。
1条答案
按热度按时间g52tjvyc1#
这不是我写的最好的 typescript ,但它的工作