reactjs - 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
推荐阅读
- android - 使用 HttpGet 获取网页信息不起作用
- pdf - ghostscript 忽略部分 pdfmarks
- pouchdb - 如何使用 PouchDB-Find 获取特定数据(从数组中)
- ios - viewForHeaderInSection 没有在 reloadData 上被调用
- mysql - 选择计数和数据
- c# - OracleLob sql server varbinary 等效对象,用于读取 VarBinary(max) C#
- c++ - 如何正确编写指针函数声明?
- jmeter - 使用 Jmeter 5.0 测试基于桌面的应用程序时出现 HTTP 采样器设置错误
- javascript - 如何获取 JavaScript 中每个单词的首字母?
- php - PhpMailer 发送邮件后回显给客户端