typescript——泛型的理解

对于泛型,个人理解的,编写一个方法,让方法可以传入任意的参数,但是参数与参数,参数与结果之间存在一定的约束,以保证传入某个类型的参数就能得到确定类型的返回值,或者保证了我们传入值的正确性,当然泛型也可以使用在类的定义

如:我们编写一个类似lodash.find的方法

function find<T>(items: T[], callback: (item: T, index: number) => boolean): T | undefined {
  for (let i = 0, length = items.length; i < length; i++) {
    if (callback(items[i], i)) {
      return items[i]
    }
  }
}

const items = [{ a: 1 }, { a: 2 }, { a: 4 }, null ]
const result = find(items, (item, index) => item.a === 2)

首先<T>是给函数声明了一个类型变量T,后面要求items是一个T类型的数组,然后后面的callback函数的参数item是一个T类型的变量,index为数字,然后callback返回boolean类型结果,整个find函数返回T类型结果或者undefined

如上,我们就能准确定义函数的每一个参数了,参数与参数,参数与返回结果之间就形成了约束关系

在使用的时候,由于定义了数组的元素必须是同一种类型,所以编译时就会提示错误

如果没有使用泛型,我们就只能使用any定义每一个参数了,如下

function find(items: any[], callback: (item: any, index: number) => boolean): any {
  for (let i = 0, length = items.length; i < length; i++) {
    if (callback(items[i], i)) {
      return items[i]
    }
  }
}

const items = [{ a: 1 }, { a: 2 }, { a: 4 }, null ]
const result = find(items, (item, index) => item.a === 2)

以上代码,ts编译是可以通过的,但很明显是非常不严谨的,对于items的定义就可以很宽泛了,然而使用泛型的时候就限制了只能是某一种类型的数组,这样就可以把可能出现的错误在开发时就找出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值