假设我们需要实现以下的类型和枚举定义:
/** /** * 宠物枚举 */ 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;