TypeScript_関数
関数の定義
void関数
引数、戻り値の無い関数の定義は以下の通りです。
function func(): void {
console.log('function');
}
func();
引数と返り値
TypeScriptでは、引数と返り値にデータ型を指定できます。
function func(msg: string): boolean {
console.log(msg);
return true;
}
console.log(func('type script'));
複数の引数を指定することもできます。
関数の戻り値は単一です。複数の値を返したい場合はオブジェクトで返します。
function func(msg: string, num: number): object {
let obj = {
'msg': msg,
'num': num,
};
return obj;
}
let obj = func('type script', 1.4);
console.log(obj);
引数
デフォルト引数
TypeScriptでは、他言語のようにデフォルト引数がサポートされています。
function func(msg: string, num: number = 0): object {
let obj = {
'msg': msg,
'num': num,
};
return obj;
}
let obj = func('type script');
console.log(obj);
任意引数(オプション引数)
任意引数とは、引数が無くてもコンパイルエラーにしない指定方法です。
JavaScriptでは、全ての引数が任意であり、それらを省くことが可能です。(その引数はundefinedになります。)
TypeScriptでは、この機能を「?」を対象引数の後ろに付けることで実装することが可能です。
function func(msg: string, num?: number): void {
if (num) {
console.log(msg + "-" + num);
} else {
console.log(msg);
}
}
func('type script');
REST引数(可変長引数)
関数の引数名の前に ... を付けることによって、引数を可変長にすることができます。
可変長の引数は関数内で配列として取得します。
function func(... args: number[]): number {
let sum: number = 0;
for (let i: number = 0; i < args.length; i++) {
sum += args[i];
}
return sum;
}
let ret: number = func(1, 2, 3, 4, 5, 6, 7, 8, 9);
console.log(ret);
関数
アロー関数式
アロー関数式は、=> を使用する形式です。function キーワードと関数名が省略可能です。
let add = (x: number): number => {
return x + 1;
};
console.log(add(5));
ワンライナーで構成できる関数は、{} と return キーワードも省略可能です。
let add = (x: number): number => x + 1;
console.log(add(5));
関数の型注釈を省略することで、さらに () も省略可能です。
let add = x => x + 1;
console.log(add(5));
オーバーロード
TypeScript は関数のオーバーロードをサポートしており、引数や戻り値が異なる同名関数を宣言することができます。
function func(x: number): number;
function func(x: string, y?: boolean): string;
function func(x: boolean): number;
function func(x: any, y?: boolean): any {
switch (typeof x) {
case 'number':
return x + 1;
case 'string':
if (y) {
return x.toUpperCase();
}
return x.toLowerCase();
case 'boolean':
if (x) return 1;
return 0;
default:
console.log('Syntax error.');
break;
}
}
console.log(func(1)); // 2
console.log(func('Overload')); // overload
console.log(func('Overload', true)); // OVERLOAD
console.log(func(true)); // 1
console.log(func(false)); // 0
ジェネリック型(Generics、総称型)
ジェネリック型とは、型そのものをパラメータ化しておき、呼び出し時に指定する手法です。
関数オーバーロードのようなシグネチャの記述が不要になります。
function func<T>(x: T): any {
switch (typeof x) {
case 'number':
return x + 1;
case 'string':
return x.toUpperCase();
case 'boolean':
if (x) return 1;
return 0;
default:
console.log('Syntax error.');
break;
}
}
console.log(func<number>(1)); // 2
console.log(func<string>('Generics')); // overload
console.log(func<boolean>(true)); // 1
※任意引数の利用可否は仕様上不明ですが、複雑になるので利用しないほうがいいと思われます。
関連ページ
- JavaScript
- TypeScript_環境設定
- TypeScript_変数
- TypeScript_制御構文
- TypeScript_関数
- TypeScript_クラス
- TypeScript_インターフェース
- TypeScript_jQueryの利用