【发布时间】:2018-12-29 08:25:59
【问题描述】:
大家好,我正在尝试寻找一种方法来约束函数参数,因此它只需要像我在函数验证字段中所做的那样将“字符串”约束到接口属性:
注意:这只是为了让问题更简单的定义打字稿代码。
index.d.ts
export interface FieldErrors {
errors: Array<FieldError>;
}
export type FieldsErrors<TForm> = {
[k in keyof TForm]: FieldErrors;
}
export interface ValidateFieldsCallback<TForm> { (fieldsErrors: FieldsErrors<TForm>, values: TForm): void; };
export interface FormShape<TForm> {
getFieldValue(fieldName: 'documentNumber' | 'userName'): void; // HOW TO FIX THIS
validateFields(callback: ValidateFieldsCallback<TForm>): void;
validateFields(fieldsNames: Array<string>, callback: ValidateFieldsCallback<TForm>): void;
}
example.ts
interface SignupForm {
documentNumber: number;
userName: string;
}
const testForm = <FormShape<SignupForm>>{};
testForm.validateFields((values) => {
console.log(values.documentNumber); // OK
console.log(values.userName); // OK
console.log(values.other); // ERROR
});
// THIS SHOULD BE FIXED
const documentNumber = testForm.getFieldValue('documentNumber');
如您所见,我可以限制 validateFields 回调的参数 fieldsErrors 类型,但我需要修复函数 getFieldValue 仅接受基于接口属性的“正确”字段名称,并根据接口类型返回正确的类型,也不为 void。
任何帮助将不胜感激。
【问题讨论】:
-
请贴代码而不是图片!
-
@TitianCernicova-Dragomir 完成! :)
-
仅供将来参考,如果将其简化为更小的示例会很好;示例中的许多代码与所提出的问题并不真正相关。