我有以下结构:
type ErrorObject = {
name: string,
message: string,
}
const ALL_ERRORS: ErrorObject[] = [
{
name: 'No-empty-name',
message: 'You must provide a name',
},
{
name: 'No-empty-age',
message: 'You must provide an age',
},
{
name: 'No-under-18',
message: 'You must be 18+ to continue',
}
]
现在,我正在尝试创建一个类型,该类型将定义所有可能的error name
,最终应如下所示:
type PossibleErrorNames = 'No-empty-name' | 'No-empty-age' | 'No-under-18'
这可以正常工作,但是在我的实际项目中,显然数组要大得多,并且更新两种类型都感觉太迟钝了,因为它们之间会相互依赖(如果更新一种,则必须更新另一种)。
我尝试了以下方法:
const ALL_NAMES = ALL_ERRORS.map(err => `'${err.name}'`).join(' | ')
type PossibleErrorNames = ALL_NAMES
这里的问题是,这是不正确的,因为它将ALL_NAMES
返回为
"'No-empty-name' | 'No-empty-age' | 'No-under-18'"
这是一个string
。
显然,这是的预期行为join()
,但是有没有办法
ALL_ERRORS
数组中推断类型的也许更优雅的名称?您可以将其用作const断言,并执行类似的操作,前提是在编译时知道完整的数组。
type ErrorObject = {
name: string,
message: string
}
const ALL_ERRORS = [
{
name: 'No-empty-name',
message: 'You must provide a name',
},
{
name: 'No-empty-age',
message: 'You must provide an age',
},
{
name: 'No-under-18',
message: 'You must be 18+ to continue',
}
] as const // <----- notice here
type PossibleErrorNames = typeof ALL_ERRORS[number]["name"]
// "No-empty-name" | "No-empty-age" | "No-under-18"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句