泛型-类型推论-高级类型

本文深入探讨了TypeScript中的泛型,包括泛型函数、泛型接口、泛型类以及类型推论和类型兼容性。通过示例解释了如何创建和使用泛型以提高代码的可重用性和灵活性,并介绍了联合类型和交叉类型的概念。泛型允许开发者编写能够适用于多种数据类型的代码,从而提升软件的抽象层次和可维护性。
摘要由CSDN通过智能技术生成

泛型

我们需要考虑可重用性。组件不仅能支持当前的数据类型,还能支持未来的数据类型,所以,设计出泛型的功能。
需要一种方法使返回值的类型和传入的参数类型是相同的。 使用了类型变量, 只用作表示类型。

泛型变量

创建泛型函数时,要求函数体必须正确使用通用类型。 必须把参数当成是任意或者所有类型。

function log(arg:T[]):T[]{
console.log(arg.length)
return arg;
}
接收类型参数T和参数arg,他是个元素类型是T的数组。并返回元素类型是T的数组。
如果我们传入数字数组,将返回一个数字数组。可以让我们把泛型变量T当成类型的一部分使用,而不是整个类型。

泛型类型

创建泛型接口.

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

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

我们可以使用带有调用签名的对象字面量来定义泛型函数:

function identity<T>(arg:T):T{
	return arg;
}
let myIdentity:{(<T>arg:T):T} = identity;

引导我们写第一个泛型接口,对象字面量拿出来做为一个接口:

interface GenericIdentityFn{
	<T>(arg:T):T;
}
function identity<T>(arg:T):T{
return arg;
}
let myIdentity:GenericIdentityFn  = identity;

我们可能想把泛型参数当作整个接口的参数.

interface GenericIdentityFn<T>{
	(arg:T):T;
}
function identity<T>(arg:T):T{
	return arg;
}
let myIdentity:GenericIdentityFn<number>  = identity;

我们不再描述泛型函数。把泛型类型函数签名做为泛型类型一部分。描述哪一部分属于泛型部分,理解合适把参数放在调用签名里和放在接口上是很有帮助的。

泛型类

泛型类看上去和接口差不多。

类型推论

当需要从几个表达式推断类型时候,会使用这些类型表达式得类型来推断一个最合适得通用类型。

let x = [0,1,null];

为了推断x的类型,我们必须考虑所有元素的类型,一共有两种number和null.
计算通用类型算法会考虑所有的候选类型。并给出一个兼容所有候选类型的类型。

由于最终的通用类型取自候选类型,有时候候选类型共享相同的通用类型,但却没有一个类型能为所有候选类型的类型。

类型兼容性

   typeScript里类型兼容性是基于结构子类型的。结构类型是一种只使用成员来描述类型的方式。它正好和名义类型形成对比。

    在使用基于名义类型的语言中

高级类型

交叉类型是将多个类型合并为一个类型。 这让我们可以把现有的多种类型叠加到一起成为一种类型。 它包含了所有需要的所有类型的特征。

联合类型

联合类型和交叉类型很有关联,但是使用上不完全相同。

我们可以使用联合类型为padding的参数:

string | number。
联合类型表示一个值可以是几种类型之一.

如果一个值是联合类型,我们只能访问这个联合类型的所有类型里共有的成员。
interface Bird{
fly();
layEggs();
}
interface Fish{
swim();
layEggs();
}
function getSmallPet():Fish|Bird{
//…
}
let pet = getSmallPet();
pet.layEggs();
pet.swim();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值