React 组件的推断泛型类型

2024-02-10

Typescript 对于推断泛型类型非常有用。例如,如果我编写以下代码:

class AwesomeClass<T> {
    constructor(public val: T) {
        // ...
    }

    public getVal(): T {
        return this.val;
    }
}

const inst = new AwesomeClass("Hello World");
const result = inst.getVal();

result会自动输入到string。漂亮!我想通过 React 更进一步。

如果我制作以下组件

interface IProps<T> {
    value: T;
    onClick: (result: T) => void;
}
interface IState { }

class AwesomeComponent<T> extends React.Component<IProps<T>, IState> {
    // ...
}

我真的很希望能推断出value必须具有相同的类型result的论证onClick。相反,当我用以下命令初始化组件时

<AwesomeComponent
    value="Hello World"
    onClick={(v) => { console.log(v); }} />;

我收到编译错误error TS2322: Type 'string' is not assignable to type 'T'.

是否可以推断 React 元素的 props 的泛型类型?

我意识到 JSX 会转换为对React.createElement(它不像我那样直接初始化类AwesomeClass上面的例子),这可能会使过程复杂化 - 这是一个交易杀手吗?如果是这样,我可以使用 JSX 语法显式命名泛型类型吗?


这还不可能,这是一个关于它的问题:使用前瞻来检测通用 JSX 元素? https://github.com/Microsoft/TypeScript/issues/6395.

现在你需要做的是:

interface IProps<T> {
    value: T;
    onClick: (result: T) => void;
}
interface IState { }

class AwesomeComponent<T> extends React.Component<IProps<T>, IState> {
    // ...
}

class ConcreteAwesomeComponent extends AwesomeComponent<string> {}

<ConcreteAwesomeComponent
    value="Hello World"
    onClick={(v) => { console.log(v); }} />;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React 组件的推断泛型类型 的相关文章

随机推荐

  • 尝试连接数据库时出现奇怪的错误

    在过去一天左右的时间里 我无法通过 PHP 连接到数据库 这是我连接到数据库的代码的样子 con mysqli connect localhost root password database 这是一个奇怪的错误 PHP 警告 mysqli
  • 没有元素的 xs:mixed 是什么意思?

    我从一位客户那里得到了以下 XSD 位 它是跨越数十个文件的遗留架构的一部分
  • x86-64 指令集、AT&T 语法、lea 和括号的混淆

    有人告诉我 lea rax rdx 是无效语法 因为源代码需要放在括号中 即 lea rax rdx 我想我显然误解了 lea 和括号的目的 我以为 lea rax rdx 会将 rax 中存储的内存地址移动到 rdx 但显然这就是 lea
  • 数据框中未定义所选列时出错

    我一直在做一项作业 我必须从 specdata 目录中读取一些 csv 文件 这些文件非常相似 有 332 个标题为 001 csv 332 csv 如果重要的话 它们具有一致的列和标题 我相信我已经很接近了 但我被上面的错误消息绊倒了 错
  • 连接稀疏矩阵特征值

    我在特征中有两个稀疏矩阵 我想将它们垂直连接成一个 例如 代码的目标是 SparseMatrix
  • events.js:183 抛出错误; // 未处理的“错误”事件

    我通过命令创建了一个新的 React 项目npx create react app agent mo项目 它已被创建 但在启动时npm start我收到以下错误 运行以下命令以避免 ENOSPC echo fs inotify max us
  • 减慢 for 循环以使 Canvas 动画化

    我正在尝试使用画布制作一些东西 我可以在其中传递一个数字 该数字等于0 360的某个度数 并且一条线将从其当前位置到我设置的度数进行动画处理 现在我已经将线路转到了我想要的任何程度 我还没有完成我传递程度的功能部分 现在只是在 for 循环
  • 我们如何在 Python 中获得可选的类属性?

    对于字典我们可以使用 get方法 类的属性并提供默认值怎么样 您可以使用hasattr http docs python org 2 library functions html hasattr and getattr http docs
  • 在 C# 中使用 XmlSerializer.Deserialize() 反序列化父级命名空间之外的子节点

    我有一个应用程序 它使用命名空间来帮助反序列化存储在 XML 中的对象 XML 命名空间也是对象所在的 C 命名空间 例如 给定以下 XML 片段
  • Android 布局文件夹组织

    我正在开发一个 Android 应用程序 目前我有大约 8 个布局 xml 文件layout文件夹 随着每个附加布局资源文件的增加 组织此文件夹的需求也在增加 但是 当我在布局文件夹内创建一个文件夹并通过重构操作将资源移动到该文件夹 时 它
  • sqlalchemy 动态惰性关系的条件多重过滤器

    我正在将 sqlalchemy 与以下模型一起使用 class Page db Model id posts db relationship Post lazy dynamic class Post db Model id page id
  • 为什么在 scala 中创建 List 时需要 Nil ? [复制]

    这个问题在这里已经有答案了 我在清单上有一个基本问题 当我尝试使用 cons 运算符创建列表时 出现以下错误 scala gt val someList 1 2
  • 如何在 Windows 上发送自定义 tcp 数据包?

    我想发送一个数据包 我定义了IP地址 端口 数据等 起初我想也许我可以在Windows上使用原始套接字 但在谷歌搜索一段时间后 我发现MS似乎禁用了原始套接字从XP SP2 是真的吗 现在我不知道该怎么办 有人告诉我用winPcap 然后我
  • IntelliJ Idea 调试/运行控制台; System.out.flush 不刷新

    这几天一直困扰着我 因为它曾经有效 我升级了我的intellij 现在它不起作用了 我不想回去 但我需要一个答案 因此 我正在编写一个控制台应用程序 当它运行时 我希望有一个 shell 来显示进度 它在运行时工作正常 但是当我在 Inte
  • 如何检查 Android 手机是否正在充电

    我正在写一个安卓应用程序 我想知道如何在应用程序启动时检查手机是否正在充电 我读过这个如何知道手机是否正在充电 https stackoverflow com questions 6243452 how to know if the pho
  • IntelliJ:禁用单个模块的警告/错误

    我最近迁移到 IntelliJ 需要解决一个特定问题 我有一个包含许多模块的项目 其中一个模块纯粹用于测试 并且包含许多错误 我想在此屏幕截图中抑制 NNGINETest 上的所有警告 错误 检查 有没有办法配置项目来做到这一点 我找到了这
  • 显示 10 秒后重复淡入淡出两张图像

    我正在尝试使用 HTML 和 CSS 在每张图像显示 10 秒后对其进行交叉淡入淡出 我希望这个不断重复 这是我的 HTML div img class bottom src 1 png img class top src 2 png di
  • Chartjs饼图,径向位移(偏移)

    Chartjs 2 是否支持饼图部分的径向位移 偏移 Chart js 本身无法像这样切出一块 但你总是可以定义您自己的图表类型 http www chartjs org docs advanced usage writing new ch
  • UIViewContentModeScaleAspectFit iphone sdk 提供质量差的图像

    希望快一点吗 我正在创建一个自定义 uitableviewcell 并添加了一个图像视图 我有一些尺寸约为 200x200 的 PNG 图像 我想创建一个缩略图以放入表格视图中 但是当我调整图像大小时 会导致图像质量较差 I use UIV
  • React 组件的推断泛型类型

    Typescript 对于推断泛型类型非常有用 例如 如果我编写以下代码 class AwesomeClass