自TypeScript 1.6起,有Stricter object literal assignment
但正如我所知,它不适用于联合类型。
module Test {
interface Intf { name: string; }
function doWorkWithIntf(param: Intf) {}
function doWorkWithUnionType(param: Intf | string) {}
function doWork2() {
//doWorkWithIntf({name: "", xx: 10}) // does not compile TS2345
doWorkWithUnionType({name: "", xx: 10}) // do compile
}
}
是我的错误还是编译错误? 我使用TS 1.7.5
答案 0 :(得分:2)
最新版本的编译器肯定会捕获这个,但不是1.8.0或更低版本。
该功能仍然存在,例如:
var example: Intf = { name: '', xx: 10 };
无法在1.8.0中编译。但是,您的版本需要更多推理,并且看起来旧编译器不会解压缩联合类型以检查值。
您可以在TypeScript playground ...
上看到处理简单和复杂的案例module Test {
interface Intf { name: string; }
function doWorkWithIntf(param: Intf) {}
function doWorkWithUnionType(param: Intf | string) {}
function doWork2() {
//doWorkWithIntf({name: "", xx: 10}) // does not compile TS2345
doWorkWithUnionType({name: "", xx: 10}) // do compile
}
var inf: Intf = { name: '', xx: 10 };
}