2016-03-25 8 views
1

私は活字体で、このコードの例があります。なぜ活字体は、入力引数の型を推測することはありません

function twice(x:number) { 
    return x*2; 
} 

function calltwice(y) { 
    return twice(y); 
} 

それがコンパイルされ、ノードでの実行がNaNを与えるを。

yのタイプが何であるか疑問に思っていますか?それは数だけ取ることができる2回の関数に渡されるので、数として推測することを期待しました。そして、この予想は、基本的にはF#によって引き起こされた:

まさにそのcalltwiceを知っている
let twice x = x*2 
let calltwice y = twice y 

はINT->あなたは、引数を指定し、タイプを返すことができ

+2

あなたの呼び出しスタックは 'calltwice'で始まり、' y'引数はanyとして推論されます。 'y(2)(y)'の中では 'y'がany型であるので、呼び出しはエラーを投げません。私はあなたがそれを逆に見ようとしていると思います。あなたはy @ 'function calltwice(y:number)の型を指定するだけです。 – PSL

答えて

1

をint型である:

function twice(x: number): number { 
    return x*2; 
} 

function calltwice(y: number): number { 
    return twice(y); 
} 

この場合、コンパイラになりますコンパイル中にタイプをチェックします。

注:活字体ではJavaScriptにコンパイルし、実行時に、それはすべてのタイプをチェックしません。潜在的に(JavaScriptからこのコードを呼び出す場合)、これらの関数に任意のオブジェクトを渡すことができます。

関連する問題