2016-12-17 7 views
0

これは、関数型が定義されていて、型検査しようとしている関数式が次のような場合に、型チェックを行うことについてです:(a)タイプ。より少ないまたはより多くの引数を持つ型チェック関数シグネチャ

以下のタイプチェックが必要ですが、ここでの質問はありません。

declare type TFunctionNumberToBoolean = (n: number) => boolean; 
const f: TFunctionNumberToBoolean = function isEven(n: number) {return n%2==0;} 

以下の場合、次のように機能タイプ規範 "ブールする番号を、" 変更された(場合):

N:数)=>ブール

&hellip ;です。TypeCheckない:規範以下のように関数の種類が変更され、 "数がブールする"

declare type TFunctionNumberToBoolean =() => boolean; 

const f: TFunctionNumberToBoolean = function isEven(n: number) {return n%2==0;} 

以下の場合(ケースB):

(nは数、FOO:数 )=>ブール

… typechecks:

declare type TFunctionNumberToBoolean = (n: number, foo: number) => boolean; 

const f: TFunctionNumberToBoolean = function isEven(n: number) {return n%2==0;} 

ケースの背後にある理由(定義関数のタイプよりも多くの引数)型チェックではないが、ケースB型チェック(定義された関数型未満の引数)が何である

?反対の行動がより直感的であるという議論ができたと私はめったに考えない。

私はFlow 0.35を使用しています。

+0

1つの引数を指定して関数を渡すときに、ゼロ引数対2引数の場合を尋ねていたことが分かりましたので、例を明確にするとよいでしょう。 – loganfsmyth

答えて

1

は、あなたがオブジェクトの2つのプロパティを取り、それらを合計する機能を持っているとしましょう:あなたは追加の引数を渡すとどうなる

function sum(obj) { 
    return obj.a + obj.b; 
} 

何?悪いことではなく、無視されます。

引数を指定しないとどうなりますか? TypeError: Cannot read property 'a' of undefinedが得られます。

より多くの引数を渡すことは安全です。より少ない引数を渡すことは安全ではありません。

+0

関数の型よりも* more *引数を使用する関数の実装を提供すると、フローがエラーになります。 –

+0

このタイプを使用すると、実際に関数の実装に必要な_less_引数を渡すため – vkurchatkin

関連する問題