我有一个用于创建类型的枚举:
export enum MyTypeEnum {
one = 'one',
two = 'two',
three = 'three',
four = 'four'
}
export type MyTypeKeyFunctionValue = { [key in MyTypeEnum ]?: Function };
export type MyTypeKeyStringValue = { [key in MyTypeEnum ]?: string };
我有一个包含使用这些确切键的getter的类:
export class MyClass {
get one() { ... implementation ...}
get two() { ... implementation ...}
get three() { ... implementation ...}
get four() { ... implementation ...}
}
我想知道是否有一种方法可以创建一个接口,该接口在实施时会强制类具有这些吸气剂。
我尝试过
interface IClass{
[key in MyTypeEnum ] : Function
}
但是它不起作用。这可能吗?
答案 0 :(得分:3)
这些吸气剂在类public API中仅表示为属性,因此将强制实现者具有这些属性吸气剂的接口等效于:
interface MyTypeKeyGetters = {
readonly one: any;
readonly two: any;
readonly three: any;
readonly four: any;
}
您可以基于枚举构建此类,并直接实现它:
export enum MyTypeEnum {
one = 'one',
two = 'two',
three = 'three',
four = 'four'
}
export type MyTypeKeyGetters = {
readonly [key in MyTypeEnum]: any
};
export class MyClass implements MyTypeKeyGetters{
get one() { return ""; }
get two() { return ""; }
get three() { return ""; }
get four() { return ""; } // error if we omit one.
}
注意:无法保证使用getter实现字段,实现类也可以使用字段。
尽管它实际上不是接口,但可以将其实现为一个接口。接口不直接支持映射的类型语法。如果要具有接口而不是类型别名,则可以定义扩展映射类型的接口:
type MyTypeKeyGetters = {
readonly [key in MyTypeEnum]: any
};
export interface MyTypeKeyGettersInterface extends MyTypeKeyGetters { }