基础示例
function identity<T>(arg: T): T {return arg;}
使用泛型变量
let fn: <T, U>(arg: T, arg2: U) => { key1: T; key2: U } = (arg, arg2) => {return {key1: arg,key2: arg2,};};
泛型接口
// 字面量let f: { <T>(params: T): T } = (a) => {return a;};// 泛型接口interface ITest {<T>(params: T): T;}let fn1: ITest = (a) => {return a;};// 可以把T拿到外层interface ITest2<T> {(a: T, b: T): T;}let fn2: ITest2<number> = (a, b) => {return a + b;};
泛型类
class GenericNumber<T> {zeroValue: T;add: (x: T, y: T) => T = function (x, y) {return x;};constructor(zeroValue: T) {this.zeroValue = zeroValue;}}let test = new GenericNumber<number>(0);test.zeroValue = 0;
泛型约束
接口约束
interface ITest {length: number;}function getLength<T extends ITest>(p: T) {return p.length;}
使用keyOf约束
function getProperty<T, K extends keyof T>(obj: T, key: K) {return obj[key];}
