我在Typescript中有一个Vue项目,我遇到了一个关于元组对象到联合类型对象的映射问题.
在上下文中,我正在研究后端端点的预期响应类型.当前,此端点接收2个值:枚举和字符串.响应对象将根据枚举进行更改.
这是当前的实施:
const validations = {
email: ['isValid', 'isAvaliable'],
password: ['isMinLengthValid', 'hasUppercase', 'hasLowercase', 'hasSpecialChars', 'hasNumbers'],
iban: ['isValid', 'isRegistered']
} as const
type ValidationsMap = {
[T in keyof typeof validations]: typeof validations[T][number]
}
function validate<T extends keyof ValidationsMap>(type: T, value: string): Record<ValidationsMap[T], boolean> {
// Do something
}
现在,后端端点将再接收一个参数,响应对象也将依赖于它.
这是我try 过的,但不起作用:
const validations = {
portal: {
email: ['isValid', 'isAvaliable'],
password: ['isMinLengthValid', 'hasUppercase', 'hasLowercase', 'hasSpecialChars', 'hasNumbers'],
},
payment: {
email: ['isValid'],
iban: ['isValid', 'isRegistered']
}
} as const
type ValidationsMap = {
[S in keyof typeof validations]: {
[T in keyof typeof validations[S]]: typeof validations[S][T][number] // Error: Type 'number' cannot be used to index type...
}
}
function validate<S extends keyof ValidationsMap, T extends keyof ValidationsMap[S]>(service: S, type: T, value: string): Record<ValidationsMap[S][T], boolean> {
// Do something
}
有人知道为什么这样不行吗?
我认为可能会限制将元组映射到联合的深度,但事实似乎并非如此.
这可以正常工作:
type PortalEmailValidation = typeof validations['portal']['email'][number]