2013-08-01 136 views
26

如果我有可能是一個字符串或布爾值的屬性如何定義它:多類型簽名成員,打字稿聯盟類型

interface Foo{ 
    bar:string; 
    bar:boolean; 
} 

我不希望訴諸:

interface Foo{ 
    bar:any; 
} 

我不認爲它可能沒有any。你可以回答這些:

我是否忽略了一個規範,其可能的權利嗎?是這樣計劃的嗎?有一個特點,要求被記錄:http://typescript.codeplex.com/workitem/list/basic? (UPDATE這是問題的報告,你可以在https://typescript.codeplex.com/workitem/1364投票)

我會想象這樣的事情:

interface Foo{ 
    bar:string; 
    bar:boolean; 
    bar:any; 
} 

var x:Foo = <any>{}; 
x.bar="asdf"; 
x.bar.toUpperCase(); // intellisence only for string 
+0

不知道您的使用方案,但會泛型幫助你在這裏?允許函數[嘗試] – Damian

回答

27

這通常被稱爲「聯合類型」。 1.4中的TypeScript類型系統確實允許這樣做。

請參見:Advanced Types

+3

它(http://goo.gl/M4qegd)我還是(天真),認爲它可以在性能允許的。但你確實回答了我的問題。順便說一句。很高興有一個ts團隊成員在stackoverflow,謝謝你。 PS:我最關心的是緩慢的編譯,每次花費時間5秒我死慢慢地,我看到在行動:) – basarat

+5

我的代碼V1.4現在允許他們 –

5

不是說這個回答你的問題,但你可以採取這樣的事情?

interface Foo<T>{ 
    bar:T; 
} 

function createFoo<T>(bar:T) : Foo<T>{ 
    return {bar:bar}; 
} 

var sFoo = createFoo("s"); 
var len = sFoo.bar.length; 

var bFoo = createFoo(true); 
var result = bFoo.bar === true; 
+0

+1一個有用的答案。但是我的使用場景被定義的東西像打字稿接口:https://github.com/gruntjs/grunt-contrib-watch#optionsevent目前我(和其他人)訴諸'any'這類案件 – basarat

52

截至2015年,工會工作類型:

interface Foo { 
    bar:string|boolean; 
} 
+2

這應該是公認的答案。 –