【问题标题】:TypeScript - Filter by Generic TypeTypeScript - 按通用类型过滤
【发布时间】:2021-02-07 15:03:20
【问题描述】:

我有一个对象,它有一些值是数组,而一些不是。我想过滤掉数组,我看到它以类似于以下的方式完成,但我希望它对所有数组完成,并且在它不是类型而不是类型的情况下完成,而不仅仅是传递一个具体类型。能做到吗?

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 is Array,但我现在已经更改了它。尽管如此,问题仍然存在。

【问题讨论】:

  • 请考虑修改上面的代码以构成一个minimal reproducible example 适合放入像The TypeScript Playground 这样的独立IDE 中,其他人可以自己演示这个问题。这将增加您获得的任何答案实际上解决您所看到的问题的机会。

标签: typescript


【解决方案1】:

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,参见this。)

Playground

【讨论】:

  • 谢谢!这正是我所需要的。
猜你喜欢
  • 2021-03-01
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
相关资源
最近更新 更多