TypeScript 可変長引数関数のisの実装

const is = <T extends unknown>(a: T, ...b: [T, ...T[]]) => b.every(_ => _ === a)

console.log(is('string', 'otherstring')) //false
console.log(is(true, false)) //false
console.log(is(42, 42)) //true
console.log(is(1, 1, 1)) //true
console.log(is(1, 1, 2)) //false
console.log(is(1, 2, 1)) //false
console.log(is(1, 2, 3)) //false
console.log(is(1, 1, 1, 1)) //false

console.log(is(10, 'foo')) //型エラー
console.log(is(1, 'hoge', 1, 1)) //型エラー
console.log(is()) //型エラー

参考:

プログラミングTypeScript
――スケールするJavaScriptアプリケーション開発