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
}