假设我们需要实现以下的类型和枚举定义:
/**
/**
* 宠物枚举
*/
enum Pets {
CAT = 'cat',
DOG = 'dog',
PIG = 'pig',
}
/**
* 宠物归属人
*/
const PETS_OWNER = {
cat: 'sam',
dog: 'john',
pig: 'kevin',
}
type PetType = ?; // 这里的 PetType 如何取值?
/**
* getPetByOwner
*/
function getPetByOwner (type: PetType) {
return PETS_OWNER[type];
}
这里的 petType 的定义显而易见,应该是枚举 PETS_ENUM 中的每一项的值:
type PetType = 'cat' | 'dog' | 'pig';
也可以用枚举映射来取值:
type PetType = PETS_ENUM .CAT | PETS_ENUM .DOG | PETS_ENUM .PIG;
上面这种写法比较啰嗦,我们可以利用 Typescript 内置的工具类型 Record 和 keyof 来实现
type PetType = keyof Record<Pets, string>
其实 Typescipt 已经帮我们实现了这个过程,只需将 PETS_ENUM 赋值给 PetType 即可:
type PetType = PETS_ENUM;