我有一个具有静态属性的类,我想获得所有属性值的列表:
class TimeRange {
static ALL = 'all time'
static MONTH = 'month'
static WEEK = 'week'
static DAY = 'day'
}
现在我想得到:['all time', 'month', 'week', 'day']
答案 0 :(得分:0)
你的用例是什么?如果您正在寻找一种方法来获得一些可以迭代但也可以通过键引用的属性,那么您可以使用普通对象:
const timeRanges = {
ALL: 'all time',
MONTH: 'month',
WEEK: 'week',
DAY: 'day'
}
timeRanges.ALL; // 'all time'
timeRanges.MINUTE; // not allowed
Object.keys(timeRanges).map(key => timeRanges[key]); // ['all time', 'month', 'week', 'day']
类并不是真正设计为迭代它们的属性。但是,如果它们绝对必须在类中,您可以按照概述here的方法将它们转换为实例属性:
class TimeRange {
ALL = 'all time'
MONTH = 'month'
WEEK = 'week'
DAY = 'day'
}
Object.getOwnPropertyNames(new TimeRange()); // ['all time', 'month', 'week', 'day']
但这有点像反模式。
您可能考虑的最后一个选项是使用字符串枚举:
enum TimeRange {
ALL = 'all time',
MONTH = 'month',
WEEK = 'week',
DAY = 'day'
}
Object.keys(TimeRange).map(key => TimeRange[key]); // ['all time', 'month', 'week', 'day']
(为了澄清,我假设你在这里根据问题中的标签使用Typescript。如果你不是,那么你对原始问题的评论就可以了。你仍然可以使用选项1和2建议在这里,但显然没有类型检查的好处。)