扩展另一个接口的通用接口

时间:2018-03-01 07:25:39

标签: reactjs typescript redux-form

我的组件界面

interface InputProps {
  value?:string,
  onChange?: (event: React.SyntheticEvent<HTMLInputElement>, data: string) => void;
}

我想编写包含P和WrappedFieldProps

所有道具的泛型类型
interface FormComponent<P> extends WrappedFieldProps  {
// props from P
// props from WrappedFieldProps
}

/*
// import { WrappedFieldProps } from 'redux-form'
interface WrappedFieldProps {
    input: WrappedFieldInputProps;
    meta: WrappedFieldMetaProps;
}
*/

并在通用函数shouldComponentUpdate

中使用它
export function shouldFormFieldUpdate<P>(props: FormComponentProps<P>, nextProps: FormComponentProps<P>): boolean {
    const { input: { value }, meta: { valid, touched, error }, ...rest } = props;
    let result;
    // compare logic
    return result;
}

但是我在rest变量上遇到了ts错误:rest类型只能从对象类型中创建

1 个答案:

答案 0 :(得分:1)

您可以为此

定义交叉点类型
type  FormComponent<P> = P & WrappedFieldProps ;
export function shouldFormFieldUpdate<P>(props: FormComponent<P>, nextProps: FormComponent<P>): boolean {
    const { input: { value }, meta: { valid, touched, error } } = props;
    let result;
    // compare logic
    return result;
}

上述代码的限制是您无法使用...rest。这是当前的limitation