解压缩对象时定义属性类型

时间:2020-03-10 12:06:10

标签: javascript typescript

我正在将一个对象解压缩为几个变量,并且我想定义一种属性的类型,该类型将对象中剩余的属性解压缩。

例如:

interface FooBar { name: string }

const {a, b, ...c} = d;

我需要将c的类型声明为FooBar

我尝试过预先声明变量:

let c: FooBar;
let {a, b, ...c} = d;

还尝试了类型语法:

let {a, b, ...c:FooBar} = d;

我尝试将d强制转换为该类型,但是遇到ab不属于该类型的错误。

let {a, b, ...c} = d as FooBar;

我尝试了自定义类型,但收到错误消息:

let {a, b, ...c} = d as {a:any, b:any, c:FooBar};

使用TypeScript解压缩对象时,是否可以定义类型?

已更新:

这是一个更好的编码示例,解释了涉及的不同类型:

interface FooBar {
   name: string
}

interface Other {
   a: number;
   b: number;
   name: string;
}

function convert(d: Other) {
   const {a, b, ...c} = d;
   c.name;
   // ^^^ -- WebStorm does not match "name" as a property of FooBar.
   //        It matches to ALL interfaces that have any property called "name". 
}

上面的问题是我不能重构接口FooBar,因为WebStorm在实现该接口时未明确匹配c。它会将其视为具有name属性的所有类型匹配。

所以我想将c定义为FooBar类型。

1 个答案:

答案 0 :(得分:0)

根据您的更新,您可以执行此操作。

  computed: {
    result_of_test() {
        return this.list.reduce((currentValue, item) => {
           if((item.range_of_test[0] >= 400 && item.range_of_test[1] <= 800) && !(item.range_of_test[0] >= 700 && item.range_of_test[1] <= 800)){
              return currentValue + item.result
           }
        return currentValue;
    }, 0)
  }
相关问题