2017-03-03 59 views
8

是否有可能限制param不接受字符串,數組等?Typescript沒有屬性的限制類型接受字符串或數組

interface foo { 
    a?: number; 
    b?: string; 
} 

function baz(param: foo) { 
} 

baz("hello"); 
+1

你爲什麼在意?如果它適合你的界面,你爲什麼介意它是一個字符串還是一個對象? –

+2

我們有一個錯誤,我們傳遞對象的屬性而不是對象,並且打字稿編譯得很好。 – user3233089

+0

這是一個值得關注的問題。 –

回答

5

你可以做這樣的事情,使baz接受至少一個對象:

interface foo { 
    a?: number; 
    b?: string; 
} 

interface notAnArray { 
    forEach?: void 
} 

type fooType = foo & object & notAnArray; 

function baz(param: fooType) { 
} 

baz("hello"); // Throws error 
baz([]); // Throws error 

fooType這裏是一個Intersection Type

+0

是不是有點欺騙?你迫使參數必須是一個對象。 –

+1

@MuratK:那不是OP想要的嗎?但我會傾向於不把它變成一種類型,只是'功能baz(param:foo&object)' –

+1

值得注意的是'object'類型是非常新的,你需要TypeScript 2.2來使用它。 –

相關問題