TypeScript -通过泛型类型过滤



我有一个对象,其中有些值是数组,有些不是。我想过滤掉数组,我看到这是用类似下面的方式完成的,但我想对所有数组都做,在它不是类型的情况下,而不是在它是类型的情况下,不只是传递一个特定的类型。这能做到吗?

Object.values(inputsOptions).filter((obj: any): obj is not Array => {
return obj instanceof Array;
}).forEach(obj =>{
//Every object has style property but arrays do not
obj.style = {marginLeft: "1em"};
});

刚刚注意到,当我的意思是完全相反的时候,我使用了obj数组,但我现在已经改变了它。但是,问题仍然存在。

在TypeScript中没有is not断言,如果有,并且objany而不是Array,这并不意味着它是一个具有样式属性的对象。

如果你知道obj只能是一个数组或者一个具有可变style属性的对象,你可以断言你做的有:

Object.values({})
.filter((value: unknown): value is { style: unknown } => {
return !Array.isArray(value);
})
.forEach((object) => {
object.style = { marginLeft: "1em" };
});

(也应该使用Array.isArray而不是instanceof Array,参见此)

游乐场

最新更新