我有一个接口foobar
,其中包含两个属性" number"。
现在我尝试将类型为foobar
的对象与通用对象定义进行匹配,其中每个属性的类型为数字。
interface foobar {
a: number,
b: number
}
function baz(param: {[key: string]: number}) {
// some math stuff here
}
const obj: foobar = {
a: 1,
b: 2
};
baz(obj); // error happens here
这会导致以下TypeScript错误。
TS2345:类型' foobar'不能分配给' {[key:string]:number; }&#39 ;.类型' foobar'中缺少索引签名。
有没有什么方法可以将对象与接口匹配到只有类型为number的值的通用对象?
答案 0 :(得分:1)
有没有什么方法可以将对象与接口匹配到只有类型为number的值的通用对象?
没有。 TypeScript不知道你没有写这个:
// OK: This is legal code
const obj1 = { a: 1, b: 2, c: "oops" };
// OK: Structural type matches
const obj: foobar = obj1;
// Crash when baz sees c: "oops"
baz(obj); // error happens here
在这种情况下,最好的选择是从这一行中删除类型注释:
const obj = {
a: 1,
b: 2
};
因为它是用对象文字初始化的const
,所以TypeScript知道对象上没有任何其他属性,因此在需要索引签名的地方使用它是安全的(r)。添加类型注释会使该行为失败。