这是我参与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 }
在这里我们可以发现他和
interface的extends类似,他们都是为了实现对象形状的组合和扩展
注意:type作为一个类型别名是一个非常灵活或者宽泛的概念,它本身不是一种类型,而是别的类型的别名,类似于快捷方式.当你使用交叉类型或者组合类型的时候你可以使用type,interface是Duck Typing的一种实现方式,是一种独特的类型,但你要实现extends或者实现类的implements的时候我们可以考虑使用interface.
总结
类型别名:类似于快捷方式,给复杂写法的类型创造一个简单写法
字符串字面量类型:提供方便的常量写法
交叉类型:使用type或者对象的一种方式