[Typescript 泛型学习] |学习记录

37 篇文章 0 订阅
15 篇文章 0 订阅

泛型:

类型变量:它是一种特殊的变量,只用于表示类型而不是值。

function identity(arg: T): T { return arg; }
T就是类型变量。
我们把这个版本的identity函数叫做泛型,因为它可以适用于多个类型。

泛型函数的两种使用方法:

1、传入所有的参数,包含类型参数:使用了<>括起来而不是()
let output = identity(“myString”); // type of output will be ‘string’

2、更普遍的方式:类型推论 – 即编译器会根据传入的参数自动地帮助我们确定T的类型。注意我们没必要使用尖括号(<>)来明确地传入类型;编译器可以查看myString的值,然后把T设置为它的类型。
let output = identity(“myString”); // type of output will be ‘string’

另外,我们可以把泛型变量T当做类型的一部分使用,而不是整个类型:
function loggingIdentity(arg: T[]): T[] {
console.log(arg.length); // Array has a .length, so no more error
return arg;
}

T[] 等同于 T的写法

泛型接口:

interface GenericIdentityFn { (arg: T): T; } function identity(arg: T): T { return arg; } let myIdentity: GenericIdentityFn = 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; };
类有两部分:静态部分和实例部分。 泛型类指的是实例部分的类型,所以类的静态属性不能使用这个泛型类型。

泛型约束:

我们定义一个接口来描述约束条件,可以使用extends来进行约束
interface Lengthwise { length: number; } function loggingIdentity(arg: T): T { console.log(arg.length); // Now we know it has a .length property, so no more error return arg; }

我们需要传入符合约束类型的值,必须包含必须的属性:
loggingIdentity({length: 10, value: 3});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值