我正在使用名为pathmirror的工具,它可以像这样转换对象:
{a: {b: null} }
至{a: {b: 'a.b'}
这对Redux操作名称很有帮助。
如何为此输入类型?
目前,我有:
declare module "pathmirror" {
export default function<T extends object>(value: T): {[key in keyof T]: object|string};
}
但是object|string
不能反映递归性。
答案 0 :(得分:1)
您可以将递归类型与条件类型结合使用,以将所有原始类型的字段转换为string
,同时保留任何object
类型的结构。
类型如下:
type StringKeysObject<T> = {
[P in keyof T]: T[P] extends number | string | null | undefined | boolean ? string : StringKeysObject<T[P]>;
};
function paths<T extends object>(value: T): StringKeysObject<T>{
return null as any;
};
let dd = paths({
a: {
b: null
}
})
let s = dd.a.b // string