schedule2021-10-10

【TypeScript】ジェネリックスな配列Array<T>を扱う関数を定義する

TypeScriptでGenericsな配列を扱う関数を試してみた。 引数の型がTの例は多くあるけどArray<T>は無かったのでメモしておく。

Genericsな配列を扱う関数

重複を除いたユニークなリストを返す関数を考えてみる。

/**
  * 重複を除いたユニークなリストを返す
  * @param Array<T> src
  * @return Array<T> 要素がユニークなリスト
  */
function uniqueList<T>(src: Array<T>): Array<T> {
  return src.filter(function (elem, index, self) {
    return self.indexOf(elem) === index
  })
}

関数名のあとにジェネリクス<T>を定義して、あとは引数と返り値の型でArray<T>と利用することができる。

実行するとstring型とnumber型もunionでも利用できた。

const chars = ['A', 'B', 'A', 'B', 'C', 'A']
const numbers = [0, 1, 2, 2, 1, 3, 1]
const unions: Array<number|string> = [1, 2, 2, 'A', 'A', 'B']

console.log(uniqueList(chars))
// ['A', 'B', 'C']
console.log(uniqueList(numbers))
// [0, 1, 2, 3]
console.log(uniqueList(unions))
// [1, 2, 'A', 'B']