如何键入以下结构:
const fields: any = {
[AuthForms.LoginForm]: ['email', 'password'],
[AuthForms.ForceChangePasswordForm]: ['password', 'confirmPassword'],
[AuthForms.ForgottenPasswordForm]: ['email'],
[AuthForms.ResetPasswordForm]: ['email', 'password', 'confirmPassword']
};
我在下面尝试过,但是语法不太正确
const fields: { [keyof AuthForms]: string[] } = {
[AuthForms.LoginForm]: ['email', 'password'],
[AuthForms.ForceChangePasswordForm]: ['password', 'confirmPassword'],
[AuthForms.ForgottenPasswordForm]: ['email'],
[AuthForms.ResetPasswordForm]: ['email', 'password', 'confirmPassword']
};
答案 0 :(得分:1)
为便于记录,您应该可以完全省略类型注释,并使用TS推断的类型。那是我个人要做的,但是如果您由于某种原因而不能...
索引签名({ [key: string]: SomeType }
语法)仅接受键的类型为string
和number
。为了指定特定的键,您需要使用mapped type.
请记住:只需指定SomeEnum
即可指定SomeEnum
键的类型,因此这里不需要keyof
。
const fields: { [K in AuthForms]: string[] } = {
您还可以选择更具可读性的Record
类型,该类型是为像这样的简单情况而设计的。这和上面的一样:
const fields: Record<AuthForms, string[]> = {