typescript - 我如何定义被枚举约束的接口属性?
假设我需要定义一个物体的形状,比如:
const orange = {
color: 'red',
sweet: true,
acidic: true,
bitter: false
}
使用 interface
interface Fruit {
color: string,
?
}
未知部分(口味)应当通过以下enum进行约束(仅允许以下键,不一定要全部使用):
enum Taste {
ACIDIC = 'acidic',
SWEET = 'sweet',
BITTER = 'bitter'
}
具有相应的布尔类型值。
我本可以定义一些 Record<Taste, boolean>,但是当我不能将 Fruit 定义为类型(而不是接口),因为它继承了 Food 接口时,我如何将其 纳入 我的目标 Fruit 接口呢?(为了更复杂一些)
答案#1
TypeScript 接口支持多重继承
你应该能够做到
enum Taste {
ACIDIC = 'acidic',
SWEET = 'sweet',
BITTER = 'bitter'
}
interface Food { /* props common to all foods */ }
interface Fruit extends Food, Record<Taste, boolean> {
color: string;
}
如果 Record<Taste, boolean> 的某个属性与 Food 上的属性发生冲突(即它们的类型不兼容),TS 会在编译时给出类型错误。
如果你不想要求所有的 Taste 属性都存在,你可以让 Fruit 实现 Partial<Record<Taste, boolean>>。
