interface A {
a: number;
}
let myVar: A = {
a: 123
};
myVar = Object.assign({}, myVar, {
b: 456
});
Run Code Online (Sandbox Code Playgroud)
为什么TypeScript不会抱怨myVar通过Object.assign()调用重新分配?
鉴于该Object.assign()调用的类型定义是:
assign<T, U, V>(target: T, source1: U, source2: V): T & U & V;
Run Code Online (Sandbox Code Playgroud)
...和我的调用中三种类型的(返回类型)交集不匹配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
});
Run Code Online (Sandbox Code Playgroud)
......它仍然没有抱怨.
我正在使用TypeScript 2.2.1并且"noImplicitAny"编译器标志设置为"true".
TypeScript结构类型系统的基本规则是,如果y至少与x具有相同的成员,则x与y兼容
将此规则应用于您的示例 - A与A&B&C以下内容兼容:
let abc:A&B&C = {a:123, b:456};
Run Code Online (Sandbox Code Playgroud)
任务let a:A = abc;完全有效.
更多信息在这里
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |