我需要排除一些Map类型的文字:
type ReformValidator = "required" | "minLength" | "maxLength";
interface FieldsValidator {
[key: string]: {
[V in ReformValidator]?: any
} & {
[K in Exclude<string, ReformValidator>]?: {
validator: () => boolean;
message: string;
}
}
}
const validators: FieldsValidator = {
firstName: {
required: true
}
}
预期没有错误,但有:
类型'{必需:true;}'不能赋值给类型'{required?:任何;...} & { [x:string]:{ ...};}'。
- 类型“{必需:true; }'不能赋值给类型'{...};}'。
- 属性“required”与索引签名不兼容。
- 类型**'boolean'不可赋值给类型'{验证器:()=> boolean; string;}**'
1条答案
按热度按时间brccelvz1#
首先,如果你不想把
{ validator: () => boolean; message: string; }
赋值给ReformValidator中的键,你必须限制它的类型。它不可能是any
,因为{ validator: () => boolean; message: string; }
满足any
。我建议使用更具体的类型,如boolean | number
。第二,将
&
替换为|
,就可以了。您可以在
[K: string]?
中删除?
,因为如果Record
的键是string
,则值不是具体的,因此不需要它们。您可以通过使用内置类型来进一步简化声明:
也就是说:
Record<K, V>
等同于{ [key: K]: V }
Partial<K>
使K
中的所有键都是可选的(使用?
),因此Partial<Record<K, V>>
等效于{ [key: K]?: V }