Typescript 中的通用类型
Generic type in Typescript
我无法理解来自 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
。有没有办法传入 FormData
或 State
?
const getFormValues: DataSelector
始终为泛型类型参数 FormData
和 State
设置默认类型 {}
,因为该函数不会将这些参数转发给使用者。
解决涉及第三方库的类型问题的通常方法是:如果你不能控制它,就把它包装起来。意思是,定义你自己的函数来包装库函数并缩小到所需的项目类型。
// 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
我无法理解来自 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
。有没有办法传入 FormData
或 State
?
const getFormValues: DataSelector
始终为泛型类型参数 FormData
和 State
设置默认类型 {}
,因为该函数不会将这些参数转发给使用者。
解决涉及第三方库的类型问题的通常方法是:如果你不能控制它,就把它包装起来。意思是,定义你自己的函数来包装库函数并缩小到所需的项目类型。
// 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