【发布时间】:2017-02-27 00:15:04
【问题描述】:
interface A {
a: number;
}
let myVar: A = {
a: 123
};
myVar = Object.assign({}, myVar, {
b: 456
});
为什么 TypeScript 不抱怨通过 Object.assign() 调用重新分配 myVar?
鉴于Object.assign() 调用的类型定义为:
assign<T, U, V>(target: T, source1: U, source2: V): T & U & V;
...而且我调用中三种类型的(返回类型)交集与interface A 不匹配,编译器不应该选择它吗?
问题与 TypeScript 无法推断函数调用中的类型无关,因为如果我将代码更改为:
interface A {
a: number;
}
interface B {
b: number;
}
interface C {}
let myVar: A = {
a: 345
};
myVar = Object.assign<C, A, B>({}, myVar, {
b: 345
});
...它仍然没有抱怨。
我使用的是 TypeScript 2.2.1,并且“noImplicitAny”编译器标志设置为“true”。
【问题讨论】:
标签: typescript