関数 型安全、JavaScriptのargumentsオブジェクトの代替、可変長引数関数、レストパラメーター
プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発(Boris Cherny(著)、今村 謙士(監修)、原 隆文(翻訳)、オライリー・ジャパン)の4章(関数)、4.5(練習問題)2の解答を求めてみる。
argumentsオブジェクトは型安全ではない。
JavaScriptの以下のコードをTypeScriptで型安全であるよに書き換えてみる。
function product() {
return Array.from(arguments)
.reduce(
(prev, cur) => prev * cur,
1
)
}
console.log(product(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
console.log(product(1, 'a'));
入出力結果(Terminal, Zsh)
% node sample2.js
3628800
NaN
%
function product(...numbers: number[]): number {
return numbers.reduce(
(prev, cur) => prev * cur,
1
)
}
console.log(product(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
// Argument of type 'string' is not assignable to parameter of type 'number'.ts(2345)
// console.log(product(1, 'a'))
入出力結果(Terminal, Zsh)
% ts-node sample2.ts
3628800
%```