【发布时间】:2021-01-26 08:36:14
【问题描述】:
我有一个函数可以递归地从所有对象中删除特定属性。如果我们用 Javascript 编写它,它将是:
function removeRecursive(value) {
if (Array.isArray(value)) {
return value.map(removeRecursive);
}
if (typeof value === "object") {
return Object.keys(value)
.filter(key => key !== "remove")
.reduce((acc, key) => {
acc[key] = removeRecursive(value[key]);
return acc;
}, {});
}
return value;
};
例如:
removeRecursive({
foo: {
bar: 'foo.bar',
remove: 'this'
},
remove: 'also-this',
list: [{
remove: 'this-as-well',
baz: 'baz'
}]
})
会导致:
{
"foo": {
"bar": "foo.bar"
},
"list": [
{
"baz": "baz"
}
]
}
知道如何输入这个吗?似乎我应该有足够的信息能够返回一个新类型,该类型以某种方式递归返回相同的类型,而 remove 属性从任何对象类型中都省略了。
【问题讨论】:
标签: typescript typescript-generics