関数の型
TypeScript型シス テムは、関数の機能に対して多くの愛を与えています。結局の所、関数は、構成可能なシステムの核となる建築ブロックです。
もちろん、他の変数にアノテーションを付けることができるように、関数のパラメータにアノテーションを付けることもできます。
// variable annotation
var sampleVariable: { bar: number }
// function parameter annotation
function foo(sampleParameter: { bar: number }) { }
ここでは、インライン型アノテーションを使用しました。もちろん、インターフェースなどを使用することができます
戻り値の型には、変数に使用するのと同じスタイルの関数パラメータリストの後にアノテーションを付けることができます。
: Foo
の例です:interface Foo {
foo: string;
}
// Return type annotated as `: Foo`
function foo(sample: Foo): Foo {
return sample;
}
もちろん、ここではインターフェースを使用しましたが、他のアノテーション(インライン型アノテーションなど)を自由に使用できます。
コンパイラが型推論できる場合は、関数の戻り値の型アノテーションが必要ないことはよくあります。
interface Foo {
foo: string;
}
function foo(sample: Foo) {
return sample; // inferred return type 'Foo'
}
しかし、一般的には、これらのアノテーションを追加してエラー対処をしやすくする方が良い考えです。例:
function foo() {
return { fou: 'John Doe' }; // You might not find this misspelling of `foo` till it's too late
}
sendAsJSON(foo());
関数から何かを返す予定がないなら、
:void
とアノテーションを付けることができます。通常、:void
を書かずに型推論に任せることができます。パラメータをオプションとしてマークすることができます:
function foo(bar: number, bas?: string): void {
// ..
}
foo(123);
foo(123, 'hello');
あるいは、パラメータ宣言の後に
= someValue
を使用してデフォルト値を提供することもできます。これは、呼び出し元がその引数を提供しない場合に設定されます。function foo(bar: number, bas: string = 'hello') {
console.log(bar, bas);
}
foo(123); // 123, hello
foo(123, 'world'); // 123, world