Typescript 更严格的对象文字赋值和联合类型

Typescript 更严格的对象文字赋值和联合类型,typescript,typescript1.6,Typescript,Typescript1.6,由于TypeScript 1.6,因此 但正如我所看到的,它不适用于联合类型 module Test { interface Intf { name: string; } function doWorkWithIntf(param: Intf) {} function doWorkWithUnionType(param: Intf | string) {} function doWork2() { //doWorkWithIntf({name: "", xx: 10}) // doe

由于TypeScript 1.6,因此

但正如我所看到的,它不适用于联合类型

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,最新版本的编译器肯定能做到这一点,但不是1.8.0或更低版本

该功能仍然存在,例如:

var example: Intf = { name: '', xx: 10 };
不会在1.8.0中编译。但是,您的版本需要更多的推断,而且旧的编译器似乎不会解包union类型以检查值

你可以看到简单的和复杂的案件都在

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 };
}