打字稿中的通用类型

时间:2019-09-30 07:17:21

标签: reactjs typescript redux redux-form

我在理解redux-form的以下代码时遇到问题

export type DataSelector<FormData = {}, State = {}> = (formName: string, getFormState?: GetFormState) => (state: State) => FormData;

export const getFormValues: DataSelector;

// mapState
const values = getFormValues("formName")(state) // {}
return { form: values }


IDE给我一个错误,提示values返回{}。这是因为State = {}。但是,我想使用访问values.name。有没有办法传递FormDataState

1 个答案:

答案 0 :(得分:0)

const getFormValues: DataSelector始终为通用类型参数{}FormData设置默认类型State,因为该函数不会将这些参数转发给使用者。

解决涉及第三方库的类型问题的常用方法是:如果无法控制,请包装它。意思是,定义您自己的函数,该函数包装libary函数并缩小到所需的项目类型。

// your own types
type MyFormData = { baz: string };
type MyState = {foo: number};

function getFormValuesWrapper(state: MyState): MyFormData {
  return getFormValues("formName")(state) as MyFormData;
}

// or keep it generic
function getFormValuesWrapper2<FormData, State>(state: State){
  return getFormValues("formName")(state) as FormData
}

const values = getFormValuesWrapper(state);
values.baz // (property) baz: string

Playground