Typescript 根据接口中另一个属性的值设置属性名称

Typescript 根据接口中另一个属性的值设置属性名称,typescript,Typescript,是否可以为接口属性名指定允许值的列表 例如,假设我有这样一个界面: export interface DashboardRequest { name?: string; description?: string; type: 'foo'|'bar'; ['foo' |'bar']: any; } 我希望属性名称限制为接口中另一个属性的可能值 我知道上面的说法是错误的,但希望能说明我想要实现的目标 正确的方法是什么? 谢谢您可以使用一个有区别的并集(和一个交叉点,以避免重复公共字

是否可以为接口属性名指定允许值的列表

例如,假设我有这样一个界面:

export interface DashboardRequest {
  name?: string;
  description?: string;
  type: 'foo'|'bar';
  ['foo' |'bar']: any;
}
我希望属性名称限制为接口中另一个属性的可能值

我知道上面的说法是错误的,但希望能说明我想要实现的目标

正确的方法是什么?
谢谢

您可以使用一个有区别的并集(和一个交叉点,以避免重复公共字段)来实现这一点


这很聪明。我很喜欢这个。
export type DashboardRequest = {
  name?: string;
  description?: string;
} & (
    { type: 'foo'; 'foo': any } |
    { type: 'bar'; 'bar': any }
  )

let foo: DashboardRequest = {
  type: "foo",
  foo : ""
}

let bar: DashboardRequest = {
  type: "bar",
  bar : ""
}

let err: DashboardRequest = {
  type: "bar",
  foo : "" // err
}