我正在将一个对象解压缩为几个变量,并且我想定义一种属性的类型,该类型将对象中剩余的属性解压缩。
例如:
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
强制转换为该类型,但是遇到a
和b
不属于该类型的错误。
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
类型。
答案 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)
}