Typescript Generics
function map < Input , Output >( arr : Input [], func : ( arg : Input ) => Output ) : Output [] {
return arr. map (func);
}
// Parameter 'n' is of type 'string'
// 'parsed' is of type 'number[]'
const parsed = map ([ "1" , "2" , "3" ], ( n ) => parseInt (n));
Constraints
Generic functions can work on any kind of value. Sometimes we want to relate two values, but can only operate on a certain subset of values. In this case, we can use a constraint to limit the kinds of types that a type parameter can accept.
function longest < Type extends { length : number }>( a : Type , b : Type ) {
if (a. length >= b. length ) {
return a;
} else {
return b;
}
}
// longerArray is of type 'number[]'
const longerArray = longest ([ 1 , 2 ], [ 1 , 2 , 3 ]);
// longerString is of type 'alice' | 'bob'
const longerString = longest ( "alice" , "bob" );
// Error! Numbers don't have a 'length' property
const notOK = longest ( 10 , 100 );
// Argument of type 'number' is not assignable to parameter of type '{ length: number; }'.