// 使用关键字type定义类型别名对象,可以复用
type myname = number | string
function hander1(name: myname) {
console.log(name)
if (typeof name === 'string') {
console.log(name.length)
}
}
//不使用类型别名
function hander2(x: number,y:number,z?:number) {
}
//使用类型别名
type myx={x: number,y:number,z?:number}
function hander3(mytype:myx) {
}
接口(interface)的声明的使用
关键字使用interface声明
相比较类型别名,少了=
typescript复制代码
//接口interface,没有=号
interface myX2 {
x: number
y: number
z?: number
}
//使用接口声明
function hander4(mytype: myX2) {
}
二者区别:
类型别名和接口声明非常相似,在定义对象的时候,可以任意选择使用
主要区别:
type类型使用范围更广
type定义的是别名,不允许两个相同名称的别名使用
typescript复制代码
type myname = number | string
1,接口类型只能用来声明对象
2,接口类型声明对象的时候可以多次声明
3,接口类型支持继承
4,接口类型支持被类实现
typescript复制代码
//接口interface,没有=号,可以多次声明
interface myX2 {
x: number
y: number
}
//接口interface,没有=号
interface myX2 {
z?: number
}
//使用接口声明
function hander4(mytype: myX2) {
}
//接口interface,支持继承
interface myX2 {
x: number
y: number
}
interface myX3 extends myX2 {
z?: number
}
function hander5(mytype: myX3) {
console.log(mytype.x,mytype.y,mytype.z)
}
hander5({x:1,y:2,z:3})
联合类型和交叉类型
联合类型
ts允许我们使用多种运算符,从现有类型中构建新类型
联合类型由两个或多个类型组成的类型
表示可以是这些类型中的任何一个值
联合类型中的每一个类型被称为联合成员
typescript复制代码
// 联合类型
function hander(name: number | string) {
console.log(name)
}
hander(1)
hander("123")
//联合类型
let nainfo: number | string = "abc"
nainfo = 1
nainfo = "123"
//但联合类型要使用的时候,要注意类型缩小,类似
// 联合类型
function hander1(name: number | string) {
console.log(name)
if (typeof name === 'string') {
console.log(name.length)
}
}
hander1(1)
hander1("123")
注意:
在拿联合类型的值之后,因为它可能是任何一种类型,如何使用呢?
类似拿到的是number,就不能使用string的一些方法
解决:
需要使用缩小集合,也就是类型缩小,根据缩小的代码,推断出更加具体的类型
交叉类型
交叉类型表示需要满足多个类型的条件
交叉类型使用&符号
typescript复制代码
//交叉类型,两种或者多种类型同时满足
type myY = number & string//想同时满足数值和字符串类型,不可能,估没有意义
type myY2 = number & string
interface myX2 {
x: number
y: number
}
interface myX3 {
z?: number
p: () => void
}
//表示即满足myX2也得满足myX3,否则里面会有报错提示
const info: myX2 & myX3 = {
x: 1,
y:2,
p:()=>{
console.log("方法")
}
}