13联合类型&交叉类型
# 联合类型&交叉类型
# 1、联合类型 表示取值可以为多种类型中的一种。
let a:number|string
a = 1
a = "hello"
//或
function fn(arg:string | number){
console.log(arg)
}
fn("hello")
fn(1)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
//练习
let a:number | string = "1"
let arr:Array<number|string>=[1,"1"] //数组
function fn(arg:Array<number>|number){ //函数
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 2、交叉类型 表示取值为多种类型的全部情况
interface a{
name:string
age:number
}
interface b{
sex:string
age:number
}
let obj:a&b = {name:"小明",age:18,sex:"男"}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
//练习
interface Person {
name: string;
}
interface Student {
age: number;
}
let a: Person & Student = {
name: '张三',
age: 18
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 3、类型别名
- 类型别名就是自定义类型
type x = number | string
let a:x = 1//ok
let b:x = "1"//ok
let c:x = true//error
1
2
3
4
5
2
3
4
5
//练习
type Person = {
name: string;
age: number;
};
let p: Person = {
name: '张三',
age: 18
};
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
案例
- 用type来定义数组
//表示数组的值即可以是字符串也可以是数字
type Arr = (string|number)[]
let arr:Arr = [1,"2",3]
1
2
3
4
2
3
4
- 用type来定义对象
type Obj = {name:string,age?:number,readonly sex?:string}
let obj:Obj = {name:"小明",sex:"男"}
obj.sex = "女"//报错,不能修改
1
2
3
4
5
2
3
4
5
- 用type来定义函数
type Fn = (arg:number)=>number
let fn:Fn = function(arg:number):number{
return arg
}
console.log(fn(1))
1
2
3
4
5
6
7
2
3
4
5
6
7
编辑 (opens new window)
上次更新: 2023/08/06, 00:38:41