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 组件的推断泛型类型 的相关文章

  • QUnit 不会运行测试

    我刚刚开始使用 QUnit 并遇到问题 我目前正在使用 TypeScript 它是一个 JavaScript 编译器 我在与我的主要课程结构平行的课程中进行测试 在每个类中 我都有一个名为 runTests 的函数 为了执行这些测试 我循环
  • 在react-router转换期间我应该如何更新redux存储?

    我面临着如何在发生反应路由器转换时更新存储的问题 在我当前的实现中 如下 在渲染下一页之前更新存储 当当前页面根据下一页的数据获取商店更新时 就会出现问题 1 当前页面毫无意义地呈现 它订阅了商店更新 因为更新的商店是针对下一页的 2 当前
  • 与嵌套泛型集合的混淆

    请帮助我理解为什么add1 and add4 报告错误以及原因add2 and add3 不 具体来说 请举例说明如果编译器允许其中每一个进行编译 则会产生不良后果的示例 class InnerTypeConfusion interface
  • 使用 Apollo-Client 对 GitHub API v4 进行身份验证

    与之前的版本一样 GitHub 的新 GraphQL API 需要使用令牌进行身份验证 那么 我们如何添加一个 Header 信息到HttpLink里面Apollo Client const client new ApolloClient
  • ionic2 对菜单项应用 ngx-translate

    我正在使用 ngx translate 来支持多语言 并且运行良好 但我也想申请菜单项 我该如何实现这一目标 我有 3 个菜单项 我想更改每个标题的语言 ts file appPages PageObj title Profile comp
  • 如何为 NextAuth.js 创建自定义 UI(使用 AWS Cognito)?

    是否可以为 AWS Cognito 提供自定义 UINextAuth js https next auth js org 当我使用 NextAuth js 调用 API 时 我看到这个 主观上丑陋的 屏幕 只有一个按钮可以将您重定向到真正的
  • 样式组件如何影响性能?

    使用样式组件是否比样式表更会降低 Web 应用程序的速度 如果我关心性能并且没有任何依赖于 props 的样式 我是否应该放弃样式组件并使用样式表 当您有很多小组件时 同时使用样式化组件渲染 性能开销可能会很有意义 绝对值得测试以删除小元素
  • React Typescript:从文件输入获取文件

    我得到的错误是Property files does not exist on type ChangeEvent
  • 防止在 MaterializeCSS 下拉菜单中单击时关闭该下拉菜单

    我正在为当前项目使用 Materialize css 并且我的下拉菜单中包含一些输入表单 下拉菜单可以选择关闭 单击外部 dropdown content 单击内部 dropdown content 点击 dropdown button 我
  • 如何在rails中使用npm包?

    我正在尝试使用王牌编辑 https github com ajaxorg ace在我的 Ruby on Rails 应用程序中 大部分视图由 React 组件组成 我正在使用反应轨道宝石 https github com reactjs r
  • 反应模式 shouldCloseOnOverlayClick 不起作用

    我正在使用反应模式 点击叠加层后模式不会关闭 我为 isOpen 和 onRequestClose 提供了属性 但模式保持打开状态 closeModal gt this setState modalIsOpen false
  • 如何使用 Cypress 定位没有 id 属性的嵌套输入?

    我正在为 React 项目编写 Cypress 测试 我需要能够瞄准
  • React:如何从react-router-dom通过链接传递道具?

    我正在努力通过title从道具到我的Dishes组件使用但找不到解决方案 有什么建议么 import Link from react router dom const Category title gt return title expor
  • 限制类型安全异构容器中的键

    我想使用 Joshua Bloch 的 Effective Java 中描述的泛型类型安全容器模式 但想通过使用枚举来限制可用作键的类 以下是约书亚书中的代码 public class Favorites private Map
  • Typescript 找不到模块

    我在 Typescript 的一个文件 upload ts 中有一个导出的模块 我无法在没有错误的情况下导入到另一个文件 application ts 中 另外 我无法导入 ExpressJS 这是Upload ts
  • 添加 CSS 来响应创建的元素,例如 data-reactroot

    在我的根div下 react 自动 创建另一个div 有没有办法向该 div 添加一个类 我需要添加 height 100 来防止背景内容在显示覆盖层时在移动设备中滚动 这就是我检查网站上的元素时显示的方式 单击按钮时 我需要将 heigh
  • 角度2中未定义的值

    我正在创建一个应用程序 在其中使用 Ag Grid api 在网页上列出我的数据库内容 Ag grid 有一个预定义的 api 来获取所选行的内容 这是我的代码 export class customer entryComponent pu
  • 单击上一页的按钮路由到该页面后如何刷新页面

    我有 2 个页面 一个主页和一个页面 2 当我单击主页上的按钮时 它会路由到 page2 现在 单击主页上的按钮后 当我到达第 2 页时 它应该刷新 因为我的项目中存在一些缓存问题 我在ngoninit上添加了window location
  • 获取 JSON 中的 HTML 以在 React 组件中呈现为 HTML

    试图找出如何让链接实际呈现为链接 现在 在我从 Json 文件中读取这行文本后 React 将超链接渲染为文字文本 而不将其渲染为链接 一些数据 json about John has a blog you can read a href
  • 使用 nginx 在云上部署 django 和 React

    我有一个 digitalocean 服务器 并且已经使用 Gunicorn 和 nginx 部署了 Django 后端服务器 如何在同一台服务器上部署 React 应用程序 您可以构建 React 应用程序并使用 Nginx 提供其静态文件

随机推荐

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

    在过去一天左右的时间里 我无法通过 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