关于泛型:TypeScript之泛型
根底阐明如果咱们须要定义一个函数,一个入参和一个返回值,入参和返回值类型须要保持一致,怎么办? 比方规定类型都是字符串,那么: function doit(arg: string): string { return arg;}能够看进去,类型这里写死成string了,那类型可不可以像参数一样定义成变量传递进来?当然能够,咱们革新一下代码: function doit<T>(arg: T): T { return arg;}这里通过<T>定义了一个类型变量T,而这个T具体是什么类型,应用的时候用户传递即可: let result: string = doit<string>("我是一个字符串");事实上,编译器通过查看arg的值的类型,能够推断出T示意什么类型,因而,大部分状况下,上述代码能够简化一下: let result: string = doit("我是一个字符串");泛型类型function doit<T>(arg: T): T { return arg;}let myDoit: Function = doit;咱们想把函数doit赋值给变量myDoit,咱们定义myDoit的类型是Function,那么,可不可以明确一下myDoit的类型细节?答案是必定的: let myDoit: <T>(arg: T) => T = doit;或 let myDoit: { <T>(arg: T): T } = doit;泛型接口聪慧的是必定能够想到,咱们还能够定义一个接口: interface DoitFnType { <T>(arg: T): T;} let myDoit: DoitFnType = doit;类型锁定当初有一个状况,咱们在给myDoit赋值的是,曾经明确了类型T的理论值肯定是string,那么,就能够这样改变: interface DoitFnType<T> { (arg: T): T;} let myDoit: DoitFnType<string> = doit;泛型类也非常简单,咱们间接举个例子: ...