reactjs - Typescript中泛型格式的歧义
问题描述
我遇到了以下格式的 Typescript generic:
export const Form: <FormValues = Record<string, any>, InitialFormValues = Partial<FormValues>>(
props: FormProps<FormValues, InitialFormValues>
) => React.ReactElement;
这是什么泛型?(是泛型类型还是泛型函数?)
如果它是泛型类型(或函数),为什么代码中没有
=
符号来为其赋值以及为什么被扩展的类型没有Name
如下所示:
export const Form: Name<FormValues = Record<string, any>, InitialFormValues = Partial<FormValues>> = (
props: FormProps<FormValues, InitialFormValues>
) => React.ReactElement;
- 一般来说,这个定义扩展的原始类型是什么?
解决方案
Form
是一个 React 函数组件。它是一个泛型function
,它接受一个参数props
并返回一个ReactElement
.
参数的类型props
是FormProps<FormValues, InitialFormValues>
。 是描述特定类型对象FormProps
的泛型。interface
该函数Form
依赖于两个泛型变量FormValues
和InitialFormValues
,它们都作为 的泛型变量向下传递FormProps
。这两个泛型都有默认类型:FormValues = Record<string, any>
和InitialFormValues = Partial<FormValues>
. 第二个变量 的默认类型Partial<FormValues>
取决于第一个变量的实际类型FormValues
。
为什么代码中没有
=
符号来为其赋值
我猜这是在.d.ts
文件中?那是一个类型声明文件,所以它只定义了组件的签名,即。它的参数和返回类型。
在常规.ts
文件中,您需要实现该函数,而不仅仅是声明它。
export const Form = <FormValues extends {} = Record<string, any>, InitialFormValues = Partial<FormValues>>(
props: FormProps<FormValues, InitialFormValues>
): React.ReactElement => {
return (<div/>);
};
(这extends {}
只是为了阻止泛型和 JSX 标签之间的混淆)
Form
不扩展任何东西,这就是为什么没有Name<...>
. 基于的原始类型是函数签名。
这是一个非常基本的函数的类型:
type Add = (n: number) => number;
这是一个简单的泛型函数的类型:
type ReturnSelf = <T>(value: T) => T;
这是Form
没有泛型的类型,希望它更容易理解。
type FormType = ( props: FormProps ) => React.ReactElement;
推荐阅读
- node.js - 如何从nodejs中的google drive api下载文件mp4
- azure - 使用 Azure Powershell 从映像创建的 VM 未设置 ComputerName
- javascript - 无法在本机反应中导航到其他页面
- discord - 如何跟踪用户被提及的次数?
- html - '未设置' CSS 的交替
- sql - 在 sql server 2008 中转换浮点数与数字
- angular - Angular7,Material2,页面滚动到打开对话框的顶部
- corda - java.lang.IllegalStateException:期待在当前链上找到事务集
- python - tkinter 绑定 keyRelease 就像 keyPress 一样工作
- r - 将徽标添加到 R 中的 grid.table PDF 输出