ジェネリクス
TypeScriptでジェネリクス(Generics)を理解するための簡単なチュートリアル | I am mitsuruog
こちらを参考にジェネリクスを使ったコードを書いてみました。
User
クラスと Company
クラスを定義して、それらの配列にオブジェクトを追加できるmerge関数を定義します。
class User { id!: number; firstName!: string; } class Company { id!: number; name!: string; } function merge<T extends { id: number }>(array: T[], newValue: T): T[] { const index = array.findIndex(item => item.id === newValue.id); if (index === -1) { return [ ...array, newValue, ]; } else { return [ ...array.slice(0,index), newValue, ...array.slice(index + 1), ]; } } const userArray = [ { id: 1, firstName: 'Taro' }, { id: 2, firstName: 'Hanako' }, ]; console.log(merge(userArray, { id: 3, firstName: 'Tom' })); console.log(merge(userArray, { id: 4, firstName: 'Mary' })); const companyArray = [ { id: 1, name: 'AAA' }, { id: 2, name: 'BBB' }, ] console.log(merge(companyArray, { id: 3, name: 'CCC' }));
{ id: number }
という制約のある T
という型を定義して、merge関数の型定義に使用しました。