2016-02-23 65 views
1

由於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

回答

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