课程名称:NestJS 入门到实战 前端必学服务端新趋势
课程章节: 第1章
课程讲师:Brian
课程内容
泛型的常用方式
const pushArr = <T>(arr: T[], item: T):T[] =>{ arr.push(item) return arr } const arrNum: number[] = [1,2,3,4] // pushArr<number>(arrNum,3) // 你定义了什么类型 就 替换T console.log(pushArr<number>(arrNum,3)) // 用泛型 交换位置 function swapGeneric<T, U>(tuple: [T, U]): [U, T]{ return [tuple[1], tuple[0]] } const res = swapGeneric<string, number>(['123',123]) console.log(res)
写一个函数,这个函数会返回任何传入的值。
eg:不用泛型的话,这个函数可能是下面这样:
function identity(arg: number): number { return arg; }
如果我们要编写框架,就要考虑到各种返回值的情况,于是可能就会有这样的代码:
type idBoolean = (arg: boolean) => boolean; type idNumber = (arg: number) => number; type idString = (arg: string) => string;
有些小伙伴可能会说,我们可以使用any
类型来定义函数:
function identity(arg: any): any { return arg; }
使用any
类型会导致这个函数可以接收任何类型的arg
参数,这样就丢失了一些信息:传入的类型与返回的类型应该是相同的。
function identity<T>(arg: T): T { return arg; }
我们给identity添加了类型变量T
。 T
帮助我们捕获用户传入的类型(比如:number
),之后我们就可以使用这个类型。
identity<string>('hello');