[TypeScript]ジェネリック関数

引数や返り値の型を可変にする

function getLastValue<T>(array:T[]):T{
    return array[array.length-1];
}
const numbers:number[] = [1,2,3,4,5];
const strings:string[] = ["A","B","C","D"];

console.log(getLastValue(numbers));
console.log(typeof getLastValue(numbers));
console.log(getLastValue(strings));
console.log(typeof getLastValue(strings));
console.log(getLastValue<number>(numbers));//型推論に頼らず明示的に返り値の型を指定する場合
console.log(typeof getLastValue<number>(numbers));

 
出力

5
number
D
string
5
number

 
引数が複数

function getPairArray<T,U>(first:T,second:U):[T,U]{
    return [first,second];
}
const pair1 = getPairArray(1,"A");
const pair2 = getPairArray(2,3);

console.log(pair1);
console.log(pair2);

 
出力

[ 1, 'A' ]
[ 2, 3 ]

 
デフォルト型を指定

function getPairArray<T = number,U = string>(first:T,second:U):[T,U]{
    return [first,second];
}

const pair1 = getPairArray(1,"A");
const pair2 = getPairArray(2,3);
const pair3 = getPairArray("B",4);

console.log(pair1);
console.log(pair2);
console.log(pair3);

 
デフォルト型を指定しても型推論が優先される

[ 1, 'A' ]
[ 2, 3 ]
[ 'B', 4 ]