Javascript 字符串枚举键索引对象的Typescript定义?

Javascript 字符串枚举键索引对象的Typescript定义?,javascript,typescript,typescript-typings,Javascript,Typescript,Typescript Typings,我定义了以下枚举和数据模型: const enum Models { Location = 'Location', Person = 'Person', Vehicle = 'Vehicle' } export interface Location { name?: string, city?: string, state: string, zip?: string, } export interface Person { firstname: string,

我定义了以下枚举和数据模型:

const enum Models {
  Location = 'Location',
  Person = 'Person',
  Vehicle = 'Vehicle'
}

export interface Location {
  name?: string,
  city?: string,
  state: string,
  zip?: string,
}

export interface Person {
  firstname: string,
  lastname?: string,
}

export interface Vehicle {
  model: string,
  year?: string,
}
我将我的数据定义如下:

type ModelMap = {[key in Models]: Location | Person | Vehicle}

const data: ModelMap = {  
  [Models.Location]: { state: 'CA' },
  [Models.Location]: { state: 'OR' },
  [Models.Location]: { state: 'CO', firstname: 'blah' },
  [Models.Person]: { firstname: 'John', lastname: 'Doe' },
  [Models.Vehicle]: { model: 'Ford', year: '2018' },
}
这是可行的,但不强制每个对象使用特定类型。相反,它强制执行三种类型的联合,即地点、人员和交通工具

是否可以强制特定对象类型与枚举索引键匹配?如果是,怎么做?


例如,我希望第三个location对象的类型检查失败,因为location接口没有firstname变量。似乎我缺少枚举模型和各个接口之间的映射,但我不确定。感谢您的帮助。谢谢。

我最终创建了接口和枚举之间的映射,如下所示:

type EnumInterfaceMap = { Location: Location; Person: Person; Vehicle: Vehicle };
type ModelMap = {[key in Models]: EnumInterfaceMap[key]}

您可以在枚举和接口类型之间定义一个接口映射,并在映射类型中使用它,但在这一点上,我不确定映射类型是否有任何好处..这比我想象的要容易。谢谢接口和键之间的简单映射为我提供了所需的行为。