升级到TS 2.9.0后出现以下错误
[at-loader] ./packages/elc-form/src/views/Form.tsx:39:9
TS2322: Type '{ form: { onChange: (ev: FormEvent<HTMLInputElement>) => void; onBlur: (name: string) => void; va...' is not assignable to type 'IContext'.
Types of property 'form' are incompatible.
Type '{ onChange: (ev: FormEvent<HTMLInputElement>) => void; onBlur: (name: string) => void; values: T;...' is not assignable to type 'IFormProps'.
Types of property 'getError' are incompatible.
Type '<K extends keyof T>(name: K) => IFormErrors<T>[K]' is not assignable to type '(fieldName: string) => string'.
Types of parameters 'name' and 'fieldName' are incompatible.
Type 'string' is not assignable to type 'keyof T'.
在Form.tsx中
export interface IFormProps {
onChange(ev: React.FormEvent<HTMLInputElement>): void;
onBlur(fieldName: string): void;
values: IFormValues;
getError(fieldName: string): string;
onDropDownChange(fieldName: string, value: string): void;
setFieldValidations(fieldName: string, validations?: {}): void;
removeValidationField(fieldName: string): void;
}
export interface IContext {
form: IFormProps;
}
...
public getChildContext(): IContext {
return {
form: {
onChange: this.onChange,
onBlur: this.onBlur,
values: this.store.values,
getError: this.store.getError,
onDropDownChange: this.onDropDownChange,
setFieldValidations: this.store.setFieldValidations,
removeValidationField: this.store.removeValidationField
}
};
}
并在FormStore.tsx中:
public getError = <K extends keyof IFormValues>(name: K) => {
return this.touched[name] && this.errors[name];
};
根据TS 2.9.0,似乎类型不再匹配 你能提供一些指导吗? 提前谢谢。