ts实战系列八:函数使用泛型

1. 函数使用泛型(Generics):

(1). 怎么将传入值和传出值规定好的类型?

function test(a: any): any {
    return a;
}
const a: string = test(123)      // 成立,因为是any

(2). 使用泛型:

. 在定义函数和接口或类的时,故意不指定类型,而是使用的时候,再指定类型.可以看做为一个占位符.. function test<T>(a: T): T {  // 函数参数、返回值使用泛型
        return a;
    }
    const str: string = 'str'
    const result = test(str)    // 上面定义了参数是string,则这里返回的result也是string. function swap<T, U>(tuple: [T, U]): [U, T] {
        return [tuple[1], tuple[Ø]]
    }
    const a = swap('a', 1);     // a的类型为[string, number]

(3). 约束:

. function test<T>(a: T): T {
        // 报错,事先不知道是哪种类型,会提示a不一定会有length属性,理论上是作用在函数T类型的array,这样就可以使用length了
        console.log(a.length)
    }. 改进:
    function test<T>(a: T[]): T[] {
        console.log(a.length)
        return a
    }
    const arrs = test([1, 2, 3]). 约束:
    a. 这里就只能传数组,对象和普通类型就不能传输.
    b. 可以对泛型进行约束,只允许传入包含length属性的变量.
    interface ITestLength {
        length: number
    }
    function test<T extends ITestLength>(a: T): T {     // extends让传入值满足特定的给束条件
        console.log(a.length)
        return a
    }
    const a = test('str')
    const obj = test({ length: 10})           // 只要有length属性就行
    const arr = test([1, 2, 3])

3. 接口使用泛型:

interface KeyPair<T, U> {
    key: T,
    value: U
}
let kp1: KeyPair<number, string> = { key: 123, value: 'str' }
let kp2: KeyPair<string, number> = { key: 'str', value: 123 }

4. 数组使用泛型:

let arr: number[] = [1, 2, 3];       // 定义数组类型
let arr: Array<number> = [1, 2, 3];  // 使用泛型定义,这个Array就是interface
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值