TypeScript中的类型别名,字面量和交叉类型

212 阅读2分钟

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

类型别名(type aliase)

类型别名用来给一个类型起个新名字。

如果我们正常声明一个函数代码会很长比如:

function sum(x:number,y:number):number{}
add(1,2)
let result = add(1,2)

但如果我们使用类型别名:

type sum(x:number,y:number):number{}
let sum2:sum
const result2 = sum2(2,3)

当然也可以使用类型别名创建一个联合类型,示例:

type StrORNum = string | number
let res:StrORNum  = '123'
res = 123

字符串字面量类型

字符串字面量类型用来约束取值只能是某几个字符串中的一个。

简单的示例:

const str:'name' = 'name'
const number:1 = 1
type Directions = 'UP'|'DOwn'|'LEFT'|'RIGHT'
let toWhere:Directions = 'LEFT'

上例中,我们使用 type 定了一个字符串字面量类型 Directions,它只能取三种字符串中的一种。

注意,类型别名与字符串字面量类型都是使用 type 进行定义。

交叉类型(Intersection Types)

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

示例:

interface IName {
  name: string
}
type IPerson = IName & { age: number }
let person: IPerson = name: '123', age: 123 }

在这里我们可以发现他和interfaceextends类似,他们都是为了实现对象形状的组合和扩展

注意:type作为一个类型别名是一个非常灵活或者宽泛的概念,它本身不是一种类型,而是别的类型的别名,类似于快捷方式.当你使用交叉类型或者组合类型的时候你可以使用type,interfaceDuck Typing的一种实现方式,是一种独特的类型,但你要实现extends或者实现类的implements的时候我们可以考虑使用interface.

总结

类型别名:类似于快捷方式,给复杂写法的类型创造一个简单写法

字符串字面量类型:提供方便的常量写法

交叉类型:使用type或者对象的一种方式