1、基本使用
数字枚举类型,key 和 value 相互映射
enum Status {
OFFLINE,
ONLINE,
DELETED
}
console.log(Status)
console.log(Status['OFFLINE'])
console.log(Status[0])
字符串枚举类型:只映射 key 到 value
enum Status {
SUCCESS = 'success',
DANGER = 'danger',
WARNING = 'warning'
}
console.log(Status)
console.log(Status['SUCCESS'])
console.log(Status['success'])
2、字符串枚举操作
enum Status {
SUCCESS = 'success',
DANGER = 'danger',
WARNING = 'warning',
}
获取枚举的 key 类型
type StatusKey = keyof typeof Status;
const keyArr: StatusKey[] = ['SUCCESS', 'DANGER'];
获取枚举的 value 类型
type StatusVal = `${Status}`;
const valArr: StatusVal[] = ['success', 'danger', 'warning'];
合并枚举类型
enum Wait {
WAITING = 'waiting',
}
const merge = { ...Status, ...Wait };
type MergeStatus = typeof merge;
const s1 = MergeStatus.WAITING;
const s2 = MergeStatus.SUCCESS;
const s3 = MergeStatus.DANGER;
const s4 = MergeStatus.WARNING;
使用 Exclude 剔除枚举中的值
type ErrStatus = Exclude<Status, Status.SUCCESS>;
let a: ErrStatus = Status.DANGER;
a = Status.WARNING;
a = Status.SUCCESS;
3、作为接口使用
变量中使用
enum CardinalDirection {
North = 'N',
East = 'E',
South = 'S',
West = 'W'
};
const direction: CardinalDirection = 'N' as CardinalDirection;
const direction: CardinalDirection = CardinalDirection.North;
console.log(direction)
接口中使用
enum CardinalDirection {
North = 'N',
East = 'E',
South = 'S',
West = 'W'
};
interface Person {
sex:string;
direaction:CardinalDirection;
eate:string;
}
const respondData = [
{sex:'男',direaction:'N',eate:'苹果'},
{sex:'女',direaction:'E',eate:'猕猴桃'},
{sex:'女',direaction:'W',eate:'芒果'},
]
const arr:Person = respondData.map((item:Person) => {
return item
})
console.log('arr', arr)
作为动态key
enum Person {
xiaomimg = 'ming',
xiaogang = 'gang',
xiaowang = 'wang',
}
type TypePerson<Enum extends string = Person> = {
[key in Enum]?: {
cname: string;
age: number
};
}
const respondData = [
{ename:'ming',cname:'小明',age:16},
{ename:'gang',cname:'小刚',age:18},
{ename:'wang',cname:'小王',age:15}
]
const persons:TypePerson = {}
respondData.forEach((detail) => {
persons[detail.ename as Person] = {
cname: detail.cname,
age: detail.age
}
})
console.log('persons', persons)