如何递归地更改属性类型,我只能在单一维度上进行操作,从utility-types来看,似乎有可能实现这一点,我已经尝试了很多次,但无法正确完成>
type Convert<V, O extends object> = {
[Key in keyof O] : V
}
// single
{
let original = {
data1 : 1,
data2 : 1,
};
let converted : Convert<string, typeof original> = {
data1: 'a',
data2: 'a',
};
}
// recursive
{
let original = {
data1 : 1,
data2 : 1,
data3 : {
data1 : 1,
data2 : 1,
}
};
let converted : Convert<string, typeof original> = {
data1: 'a',
data2: 'a',
data3 : {
data1 : 'a',
data2 : 'a',
}
};
}
答案 0 :(得分:4)
我很确定您要使用递归conditional类型,只递归到本身就是对象的属性中:
type Convert<V, O extends object> = {
[K in keyof O]: O[K] extends object ? Convert<V, O[K]> : V
}
这将使您的示例代码成功,但是在某些情况下,您不希望递归到非原始属性(例如,数组?)周围,因此您应该对其进行彻底的测试。
希望有所帮助;祝你好运!