2016-11-26 12 views
0

交差タイプの関数タイプは、私が期待するように動作しません。このサンプルを取る:TypeScript関数のタイプ交差

var c: ((x: number) => void) = x => { }; 

これはうまくコンパイルされます。 xはラムダの数字です。

しかし、これは失敗します。

var c: ((x: number) => void) & ((x: number | string) => void) = x => { }; 

それは "暗黙のうちX 'あらゆる' タイプを持っている" と言います。 (--noExplicitAnyでコンパイルする。)

でもこれは同じ発言で失敗します。

var c: ((x: number) => void) & ((x: number) => void) = x => { }; 

ないすべてのタイプTため、T & Tは本当に奇妙である、Tと同じであることを意味します。

答えて

1

私はタイプ交差点がこのように使用されるとは思わなかった。コンパイラがxの型を計算できず、コンパイラオプションのために失敗したものを代入するだけかもしれません。

2つの関数の型を結合するのではなく、x自体に複数の型を定義することもはっきりしています。

var c: ((x: number | string) => void) = x => { };