有人能推荐一下如何缩小validateField
功能内的类型吗?
type TStringValidator = (v: string) => void;
type TNumberValidator = (v: number) => void;
type TFields = 'inn' | 'amount';
interface IValidators {
inn: TStringValidator[];
amount: TNumberValidator[];
}
const handleString: TStringValidator = (value: string) => {};
const handleNumber: TNumberValidator = (value: number) => {};
const validators = {
inn: [handleString],
amount: [handleNumber],
} satisfies IValidators;
function validateField(field: TFields, value: string | number) {
const fieldValidators = validators[field];
for (const validator of fieldValidators) {
// Problem is here
const result = validator(value);
}
return;
}
预计validator(value)
呼叫不会抛出TS错误:
Argument of type 'string | number' is not assignable to parameter of type 'never'.
Type 'string' is not assignable to type 'never'.(2345)
(parameter) value: string | number
很明显,TS编译器无法根据field
的值清楚地获取动态验证器的类型.
也许一些validateField
重构可以有所帮助.