関数 型安全なアサーション関数の実装、概略の記述、可変長引数、ジェネリック
プログラミングTypeScript ―スケールするJavaScriptアプリケーション開発(Boris Cherny(著)、今村 謙士(監修)、原 隆文(翻訳)、オライリー・ジャパン)の4章(関数)、4.5(練習問題)5の解答を求めてみる。
コード
type Is = <T>(...array: T[]) => boolean
let is: Is = <T>(...array: T[]) => {
if (array.length == 0) {
return true
}
let a = array[0]
return array.slice(1).every(x => a === x)
}
let a = [1]
let blns = [
is('string', 'otherstring'),
is(true, false),
is(42, 42),
// エラー
// Argument of type 'string' is not assignable to parameter of type 'number'.ts(2345)
// is(10, 'foo'),
is([1], [1, 2], [1, 2, 3]),
is(1, 1, 1, 1),
is([1], [1], [1]),
is(a, a, a),
]
for (const bln of blns) {
console.log(bln)
}
入出力結果(Terminal, Zsh)
% ts-node sample5.ts
false
false
true
false
true
false
true
%