TypeScript的联合类型
联合类型指的是一个变量有多种可能的类型,多种类型间用符号|
分割
let content: string | number = "content"; // content 既可以是字符串,也可以是数字
content = 123;
TypeScript的类型保护
as 类型断言
当一个变量有多种可能的类型时,可以通过as
关键字来确定类型
interface StrProp {
isStr: boolean
name: '字符串'
}
interface NumProp {
isStr: boolean
age: 18
}
function say(arg: StrProp | NumProp) {
// console.log(arg.name) // 报错
if(arg.isStr) {
// 当 arg 的 isStr 属性为true时,我们就断定 arg 是 StrProp 类型
console.log((arg as StrProp).name)
} else {
console.log((arg as NumProp).age)
}
}
in 语法
我们还可以通过in
判断变量有没有某个属性从而确定其类型
interface StrProp {
isStr: boolean
name: '字符串'
}
interface NumProp {
isStr: boolean
age: 18
}
function say(arg: StrProp | NumProp) {
if('name' in arg) {
console.log(arg.name)
} else { // 这里的 else 部分 TypeScript 能自动判断
console.log(arg.age)
}
}
typeof 语法
function test(arg: string | number) {
if(typeof arg === 'string') {
return arg.split('')
} else {
return 2 * arg
}
}
Enum 枚举类型
枚举类型一般用来定义常量
// enum Sex { // 枚举类型可以不初始化值,默认从0自增
// MALE,
// FEMALE,
// UNKNOW
// }
enum Sex {
MALE = 1, // 可以给定起始值,自动递增
FEMALE,
UNKNOW
}
function checkSex(sex: Sex) {
let result = '';
switch(sex) {
case Sex.MALE:
result = '男';
break;
case Sex.FEMALE:
result = '女';
break;
case Sex.UNKNOW:
result = '未知';
break;
default:
break;
}
return result;
}
console.log(checkSex(1)) // '男'