【发布时间】:2018-11-24 21:39:08
【问题描述】:
我需要创建一个常量列表,例如,
const Days = {
YESTERDAY: -1,
TODAY: 0,
TOMORROW: 1,
}
我想要一种方法来约束Days中所有属性的类型,即如果我添加一个属性BAD_DAY: true,我希望编译器抱怨。
我从创建类似的东西开始
type ObjectOf<T> = {[k: string]: T};
const Days: ObjectOf<number> = {
A: true;
}
这确实给了我一个错误,但是,当我在Days. 之后按 ctrl-space 时,我没有得到类型完成。我明白这是因为我将其设为键控对象类型。
我可以像第一个示例一样获得代码完成,也可以通过第二个示例获得编译器帮助。我可以把我的蛋糕也吃掉吗?我想我想要一些行为类似于 Java Enums 的东西,因为它是同类型对象的已知列表。
enum Days{
Today("SUN"), MONDAY("MON"), TUESDAY("TUES"), WEDNESDAY("WED"),
THURSDAY("THURS"), FRIDAY("FRI"), SATURDAY("SAT");
private String abbreviation;
public String getAbbreviation() {
return this.abbreviation;
}
Days(String abbreviation) {
this.abbreviation = abbreviation;
}
}
【问题讨论】:
标签: typescript generics