首页 > 解决方案 > 如何使用枚举值作为打字稿接口中的键?

问题描述

我正在寻找一种方法来使用枚举的键来定义接口的允许键,你是如何实现的?

http://www.typescriptlang.org/play/index.html#code/KYOwrgtgBA4qAmwBOUDeAoKUIEMA2wUAvFAOS4GkA0mUAZsBYSaQ06egL7roCWIAF2R0cAY0IAFZAGcA9iDS0QOCMABcUaQKT8A5gG5auhMg1adIA1x6j5WqAAdgshwQ1SkckAG0AusShvWlQoZVUNUgBZHCQAT2ooYxBEJAi2fGBSKE4aLBCw9TIAKWQ4hKSUiPZs3LRQlULSItlMqkSTVLJq7l8efiEkEXEoKRcCGCRZMCd4ACFYuGTkRSwAelWoAAkAUQAlbY0AC1kAdygBWSgwaUIBQ8JQSHPLxGlRHQAjW-vAgGtgWL+ABu+DAhHuSGAAH5aN5-rENPDZHRzrEnMjYB1fO4ZPI-NZ0LYQPZ0a5gBMpjN5otKiNnGSKdNgHMFh0AhgsN4acgAHTpAjYxz0gi1JgaUkELhAA

enum Gender {
  male = 'male',
  female = 'female'
}

interface Person {
  name: string;
  gender: string;
}

const people: Person[] = [
  { name: 'Mary', gender: 'female' },
  { name: 'Jerry', gender: 'male' },
  { name: 'Joe', gender: 'male' }
]

interface PeopleGroupedByGender {
  // HERE: how to use the enum to describe the [key] value here?
  [key: keyof typeof Gender]: Person[]
}

const peopleGroupedByGender: PeopleGroupedByGender = {
  [Gender.female]: people,
  male: people
}

标签: typescriptinterface

解决方案


您收到错误消息:

索引签名参数类型不能是联合类型。请考虑改用映射对象类型。

如消息所示,您可以通过使用映射对象类型来解决此问题:

type PeopleGroupedByGender = {
  [key in keyof typeof Gender]: Person[]
}

推荐阅读