如何递归地更改属性类型,我只能在单维中做到这一点,从实用程序类型来看似乎可以实现这一点,我已经尝试了很多次,但无法做到正确
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',
}
};
}
Run Code Online (Sandbox Code Playgroud)
我很确定你想要一个递归条件类型,你只递归到本身就是对象的属性:
type Convert<V, O extends object> = {
[K in keyof O]: O[K] extends object ? Convert<V, O[K]> : V
}
Run Code Online (Sandbox Code Playgroud)
这将导致您的示例代码成功,但可能存在围绕您不想递归到的非原始属性的边缘情况(例如,数组?),因此您应该对其进行彻底测试。
希望有所帮助;祝你好运!
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |