我将一个对象解压缩为几个变量,并且我想定义一个属性的类型,该属性将从一个对象解压缩其余的属性。
例如:
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
属性的匹配all类型。
所以我想将c
定义为FooBar
类型。