ts泛型使用举例

作者: 那少妇 | 来源:发表于2018-04-17 23:28 被阅读0次

官方文档地址:https://www.typescriptlang.org/docs/handbook/generics.html
中文文档:https://www.tslang.cn/docs/handbook/generics.html

什么是泛型呢?

泛型,简单来说就是类型变量。在ts中存在类型,类型如numberstringboolean等,泛型就是使用一个类型变量来表示一种类型,类型值通常是在使用的时候才会设置。泛型的使用场景非常多,可以在函数、类甚至interface中使用。

如:我们编写一个类似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的定义就可以很宽泛了,然而使用泛型的时候就限制了只能是某一种类型的数组,这样就可以把可能出现的错误在开发时就找出来

简单总结心得,有不正确的地方还请指正。


泥腿子前端的眼泪

欢迎关注我: https://github.com/nashaofu

相关文章

  • ts泛型使用举例

    官方文档地址:https://www.typescriptlang.org/docs/handbook/gener...

  • 【第7篇】TypeScript泛型的案例代码详解

    1、最简单泛型例子 Ts代码 Js文件 2、泛型类型与接口 Ts代码一 Ts编译js代码一 Ts代码二 Ts编译j...

  • TypeScript基础入门 - 泛型 - 使用泛型变量

    转载 TypeScript基础入门 - 泛型 - 使用泛型变量 项目实践仓库 为了保证后面的学习演示需要安装下ts...

  • Java 集合与泛型

    泛型编程 为什么需要泛型当如果有不同数据类型的数据要进行相同操作的时候,就可以使用泛型 使用举例我们用ArrayL...

  • TS 泛型

    定义 泛型就是用一个东西表示广泛的类型。 接口 泛型约束 就是给泛型添加一些约束。

  • TS: 泛型

    学 Java 的时候总会提到泛型,现在 TS 也有了,他们的用法都差不太多。泛型可以理解为广泛的类型。 为什么要用...

  • ts 泛型

    函数泛型 接口,类泛型

  • typeScript泛型约束

    什么是ts泛型约束?我们先来看下面一个例子有时候我们会有这样的泛型使用 我们期望在一个泛型的变量上面,获取其len...

  • umijs@use-request源码解读

    一、了解ts基本语法 涉及ts的变量声明、接口、类、函数、泛型等 ts语法知识[https://typescrip...

  • Java-API-集合框架(三)-泛型

    泛型的由来和基本使用 泛型的擦除 泛型类的使用 泛型方法的使用 泛型接口 泛型通配符(?) 通配符? 在api中的...

网友评论

    本文标题:ts泛型使用举例

    本文链接:https://www.haomeiwen.com/subject/gdjmkftx.html