考慮下面的代碼片段(見TS Playground):呼叫與工會類型的新日期「號|串」
var nr: number = 123456;
var str: string = "2015-01-01T12:00:00";
var both: number | string = 123456;
var myDate: Date;
myDate = new Date(nr);
myDate = new Date(str);
myDate = new Date(both); // <-- Compile error
這最後一行給出了一個編譯器錯誤:
Argument of type
number | string
is not assignable to parameter of type 'string'. Type 'number' is not assignable to type 'string'.
然而,由於有一個Date(...)
這兩種類型的構造函數我會假設上述將工作。
我可以解決該問題,因爲有另一個構造服用any
參數:
myDate = new Date(<any> both);
但是,如果它們的構造是不存在的,例如如果這種情況發生在我自己的班級?
有沒有什麼辦法讓它正常工作?或者是聯盟類型的設計氣味,這表明我的定義需要改變?
我檢查了TS Handbook,但它沒有關於聯合類型的部分。我試着自己解決它,但沒有超過上面提到的<any>
技巧。我已經通過了SO上的建議副本和類似問題,但到目前爲止還沒有找到答案。
這是很好的信息,謝謝。我已經接受了其他答案,因爲它是我最終使用的解決方案(/解決方法),但此處也是+1! – Jeroen
@Jeroen這對我有意義!雖然我認爲我提供了有用/有趣的信息,但seriesOne直接用這種方式回答了問題。感謝upvote :) – AndyJ