【发布时间】:2021-05-14 08:49:09
【问题描述】:
我们有如下函数
export const objectUndefinedToNull = (obj) => {
const apply = (o) => {
Object.keys(o).forEach((key) => {
const value = o[key];
if (value === undefined) {
o[key] = null;
}
if (value instanceof Array || value instanceof Object) {
apply(value || {});
}
});
};
apply(obj);
return obj;
};
我想将所有any 和unknown 类型替换为更合适的类型。
是否有任何类型代表任何可迭代类型,例如可以迭代的数组或对象?
【问题讨论】:
-
是的,有:
Iterable<T> -
@Silvermind,谢谢,我不知道有这样的类型,但它似乎不适合我的情况,因为我希望能够传递类似
Record<string, someType>的东西或objectUndefinedToNull对象上的{ [key: string]: someType }和Iterable<T>与上述类型的类型不匹配 -
这能回答你的问题吗? Checking whether something is iterable
-
不完全是,但我可以通过重写当前函数来使用它,只需使用类型谓词或类型保护来检查可迭代对象
-
此代码实际上不适用于
Record<string, someType>等对象类型,对吗?它试图将未定义的对象值设置为 null,但objectUndefinedToNull({ a: 1, b: undefined })返回{ 1: null, a: 1, b: undefined },这肯定不是预期的。据我所知,它仅适用于数组。objectUndefinedToNull([1, undefined])返回[1, null]看起来更好。
标签: typescript typescript-generics