Generic
Generic Types
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: <T>(arg: T) => T = identity; // ok
let myIdentity: <U>(arg: U) => U = identity; // ok
let myIdentity: { <T>(arg: T): T } = identity; // ok
interface GenericIdentityFn {
<T>(arg: T): T;
}
let myIdentity: GenericIdentityFn = identity; // ok
Generic Constraints
extends interface
interface HasLength {
length: number
}
function count<T extends HasLength>(element: T): number {
return element.length;
}
Using Type Parameters in Generic Constraints
keyof
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}
Generic Classes
function getProperty<T, K extends keyof T>(obj: T, key: K) {
return obj[key];
}