2017-03-03 5 views
8

paramは文字列や配列などを受け入れないように制限できますか?文字列または配列を受け入れるプロパティのないタイプを制限する

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

function baz(param: foo) { 
} 

baz("hello"); 
+1

なぜ気になりますか?それがあなたのインターフェースに合っていれば、文字列かオブジェクトかはどうして分かりますか? –

+2

オブジェクトの代わりにオブジェクトのプロパティを渡していたバグがあり、typescriptはうまくコンパイルされました。 – 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 

fooTypeIntersection Typeです。

+0

それはちょっと浮気していませんか?あなたは、パラメータがオブジェクトでなければならないことを強制しています。 –

+1

@ MuratK:OPが望んでいることではないですか?しかし、 'function baz(param:foo&object)'のような型にしないほうがいいでしょう。 –

+1

'object'型が非常に新しいことに注目すると、それを使うにはTypeScript 2.2が必要です。 –

関連する問題