【发布时间】:2022-01-03 16:54:46
【问题描述】:
const program = {
morgning: ['breakfast', 'mingle'],
evning: ['mingle', 'eat', 'party']
} as const
const namespaceEvent = Object.entries(program).reduce(
(acc, [namespace, events]) => [...acc, ...events.map(event => `${namespace}.${event}`)],
[] as string[]
) // can't do 'as const' here;
type Namespace = typeof namespaceEvent[number] // sees the type as 'string' and not "morgning.breakfast" | "morgning.mingle" | "evning.mingle" | "evning.eat" | "evning.party"
const test: Namespace = 'foo.bar' // would like this to error
console.log(namespaceEvent) // ["morgning.breakfast", "morgning.mingle", "evning.mingle", "evning.eat", "evning.party"]
我该如何进行这项工作,为什么它不起作用?
【问题讨论】:
-
另外,这似乎很好地使用了
flatMap而不是reduce。 -
@Aplet123 我非常愿意接受建议 - 你能分享一个代码示例吗?
标签: javascript typescript