千家信息网

TypeScript入门-泛型

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,泛型要创建一个可重用的组件,其中的数据类型就必须要兼容很多的类型,那么如何兼容呢,TypeScript提供了一个很好的方法:泛型Hello World要兼容多种数据格式,可能会有人想到any,即fun
千家信息网最后更新 2026年10月31日TypeScript入门-泛型

泛型

要创建一个可重用的组件,其中的数据类型就必须要兼容很多的类型,那么如何兼容呢,TypeScript提供了一个很好的方法:泛型

Hello World

要兼容多种数据格式,可能会有人想到any,即

function identify(arg: any): any{    return arg;}

使用any存在一个问题,有可能传入的值和返回的值不是同一种值,例如,传入数字,但是不确定返回的是什么值

要解决这个问题,我们需要引入类型变量-一种特殊的变量,只用于表示类型不表示值

function identity(arg: T): T {    return arg;}

给identify添加了类型变量T,用来捕获传入值的类型,然后将返回值的类型也设置为T,就实现了传入值和返回值为同一类型值的需求

我们把identify这个函数叫做泛型,因为它适用于所有类型,并且不会有any类型存在的问题

使用泛型的方法有两种:

  1、传入所有的参数,包括类型参数

let output = identify('qwe');

  2、利用类型推论--即编译器会根据传入的参数自动地帮助我们确定T的类型

let output = identify('qwe');

泛型变量

在泛型中,我们要合理正确的使用泛型变量T,要牢记T表示任何类型

错误使用:

function identify(arg: T): T {    console.log(arg.length);// Error: T doesn't have .length    return arg;}

在泛型中我们使用了length这个属性,但是T代表任何类型,所以有可能是number,而number是没有length属性的,所以会报错

如果想要使用length这个属性,我们可以创建数组

function identify(arg: T[]): T[] {    console.log(arg.length);// Error: T doesn't have .length    return arg;}

泛型类型

泛型函数的类型与非泛型函数的类型没什么不同,只是有一个类型参数在最前面,像函数声明一样:

function identify(arg: T): T {    return arg;}let myIdentify: (arg: U) => U = identify;

从上面的代码中可以看出也可以使用不同的泛型参数名,只要在数量上和使用方式上能对应上就可以

当然也可以把泛型参数当做一个接口的参数,这样就可以知道这个接口具体用的是那种类型

interface GenericIdnetify{    (arg: T): T;}function identity(arg: T): T{    return arg;}let myGenericidentify: GenericIdnetify = identity;

泛型类

泛型类看上去与泛型接口差不多。 泛型类使用( <>)括起泛型类型,跟在类名后面。

class GenericNumber {    zeroValue: T;    add: (x: T, y: T) => T;}let myGenericNumber = new GenericNumber();myGenericNumber.zeroValue = 0;myGenericNumber.add = function(x, y) { return x + y; };

泛型约束

在前面的泛型变量中遇到了一个问题,就是在泛型中调用参数的length时,如果参数没有Length属性会报错,而使用泛型约束,就是只有满足一定的条件才可以使用这个泛型

为此,我们定义一个接口来描述约束条件。 创建一个包含 .length属性的接口,使用这个接口和extends关键字还实现约束:

interface lengthwise{    length: number;}function identity(arg: T): T{    console.log(arg.length);    return arg;}identity(123); //erroridentity('qwe'); //true

当传入123时,没有length属性,就报错,而传入字符串qwe时则完全正确


类型 参数 变量 属性 接口 函数 问题 不同 就是 数据 方法 条件 会报 特殊 为此 差不多 没什么 代码 代表 关键 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 厦门中拓互联网络科技有限公司 疫情对互联网科技公司影响 深圳互联网科技公司 致骋互联网科技 迪茉互联网科技 北京互联网络科技有限公司 天津摩尔互联网科技 中正互联网科技招聘 互联网科技项目计划书材料类 互联网和黑科技的看法 互联网还是高科技吗 荆州市昕露互联网络科技有限公司 移动互联网年度科技创新 玉溪新华互联网科技好不好 互联网方面的科技前沿 从那以后互联网科技有限公司 互联网硬科技公司 黑龙江互联网科技公司 株洲百竞科技的互联网营销顾问 互联网科技公司简介 美国互联网科技巨头监管 腾讯阿里互联网科技 海南科技产业互联网平台 互联网科技有哪些公司 恒生互联网科技指数跳水 35岁以上互联网科技行业 云鲸互联网络科技有限公司 互联网时代高科技布局 小牛互联网科技有限公司地址
0