Typescript :: 相关通用约束

2023-12-12

In React,我有一个像这样的通用界面:

interface BaseProps<T> {
  data: T;
}

我的代码的使用者将扩展它来定义他们自己的Props and Component:

interface MyProps extends BaseProps<string> {
  ...
}
const MyComponent: React.FC<MyProps> = ({ data }) => {
  ...
}

我想编写一个接受这样的组件并返回与以下类型相同类型的值的方法MyComponent.data。这就是我正在努力解决的问题。我正在尝试编写此方法并将其调用为:

function myFunc<T, U extends BaseProps<T>>(component: React.FC<U>): T {
  return ...
}
const ret1 = myFunc(MyComponent);
const ret2 = myFunc<string, MyProps>(MyComponent);

ret2有正确的类型string but ret出来有unknown类型。有没有办法可以强制执行约束myFunc方法使得ret1类型正确,不需要我显式声明类型<>?

Update

@futut 和 @proton 都给出了(几乎)相同的解决方案,在这种情况下显然有效!荣誉!

然而,我在这里编写的示例代码有点过于简单。如果我改变BaseProps接口:

interface BaseProps<T> {
  callback: (value: T) => void;
}

然后我就不能再使用了U["data"]。有没有办法能够返回类型的值value参数输入MyComponent.callback在这种情况下?

PS:抱歉把球门柱移到了这里。我不擅长过于简单化。


TypeScript 不知道类型U还可以告诉它什么T是。您可以改为使用单个类型参数并使用索引访问来获取其类型data财产:

function myFunc<T extends BaseProps<any>>(component: React.FC<T>): T["data"] { 
    /* ... */ 
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript :: 相关通用约束 的相关文章

随机推荐

  • 调用 onConnected 函数后,GoogleApiClient 抛出“GoogleApiClient 尚未连接”

    所以我发现了一些关于 GoogleApiClient 对我来说不是很清楚的东西 谷歌API客户端有一个函数叫做已连接当客户端运行时运行连接的 一定 我有自己的函数 称为 开始位置聆听这最终是在 GoogleApiClient 的 onCon
  • 为什么我使用 UNUserNotificationCenter 创建的本地通知没有显示在屏幕的右上角?

    运行下面的代码不会在屏幕右上角显示通知 作为横幅或警报 通知is shown在通知中心 我确保我的系统上禁用了 请勿打扰 我还尝试了系统偏好设置 gt 通知 gt 我的应用程序名称中的 横幅 和 警报 设置 Source import Co
  • 如何将图像分成两部分? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我是安卓初学者 我想将位图图像分成块 然后以相同的方式显示图像 但分开 Edit 这段代
  • 我可以使用 google api 对文件设置锁定吗?

    当我查看Gdrive时 还有一个fuse客户端来挂载Gdrive 我想知道 当通过这个客户端修改Gdrive上的文件时 该文件是否被 锁定 或以任何其他方式设置为 正在使用 以防止其他人修改互联网上的 原始 文件 我还没有找到任何与此有关的
  • Bluez 5 未知连接标识符

    我有一个运行最新 Raspbian 的 Raspberry Pi 3 并且我有 从 5 23 升级了 bluez 至 5 43 我正在尝试连接到 BLE 以 2 秒间隔发布广告的设备 我写了一些基于的代码 在 gatttool 上并尝试连接
  • 尼黑阈值处理

    我正在尝试实现 niblack 阈值算法 该算法使用以下公式 pixel pixel gt mean k standard deviation object background 其中 k 的标准值为 0 有人可以告诉我如何在matlab中
  • window.onunload 仅在 Firefox 中关闭选项卡时触发,而不是整个浏览器关闭

    UPDATE 因此 在阅读了您的两个答案后 我意识到没有可靠的方法来确定浏览器窗口何时关闭 本来我打算在页面关闭时用它来解锁数据库中的一条记录 基本上 当用户加载页面时 它访问的记录会锁定 然后在页面关闭时解锁 关于如何以不同 更好的方式做
  • 从 Eclipse 启动 Tomcat 时出现“SetPropertiesRule”警告消息 [重复]

    这个问题在这里已经有答案了 当我从 Eclipse 3 4 启动 Tomcat 6 0 18 时 我收到以下消息 日志中的第一个消息 警告 SetPropertiesRule 服务器 服务 引擎 主机 上下文 将属性 源 设置为 org e
  • 在块矩阵中排列 numpy 数组

    我有 3 个 numpy 数组A B and C 为了简单起见 我们假设它们都是形状的 n n 我想将它们排列为块矩阵 A B B t C where B t应表示转置B 当然 我可以通过一系列串联来做到这一点 top row np con
  • Maven Surefire 找不到 ForkedBooter 类

    最近来到一个新项目 我正在尝试编译我们的源代码 昨天一切都很好 但今天却是另一回事了 每次我跑步的时候mvn clean install在模块上 一旦达到测试 它就会崩溃并出现错误 INFO maven surefire plugin 2
  • 4个字节怎么能存储这么大的值3.4e38

    与 32 位一样 我们只能存储 2 32 位数据 在C语言中 我们如何存储这么大的值3 4e38 我无法理解其背后的机制 在 IEEE 754 32 位二进制浮点格式中 32 位用作 一位符号字段 s 八位指数字段 e 23 位有效数 小数
  • 从2加入多线程访问UI线程控件

    我目前正在为我的公司开发一个小型自动更新项目 经过对多线程的一些研究后 我设法构建了以下代码 线程 01 Private Sub startUpdate If InvokeRequired Then Invoke New FTPDelega
  • 当用户单击上下文菜单中的禁用项目时,会调用哪个事件?

    我有一个按钮 它显示上下文菜单 菜单中有几个项目 其中一些被禁用 setEnabled false 当用户单击禁用的项目时 会调用哪个事件 它不是 onContextItemSelected 也不是 onContextMenuClosed
  • sizeof 运算符给出了 C# 中结构的额外大小[重复]

    这个问题在这里已经有答案了 我正在尝试使用 sizeof 运算符检查所有变量 值类型 的大小 我经历了其中之一msdn 文章哪里写着 对于所有其他类型 包括结构体 sizeof 运算符只能在不安全的代码块中使用 而且结构不应包含任何引用类型
  • 检查 JPanel 是否包含 JButton

    我已经添加了一个按钮JPanel 我想删除该按钮 如果JPanel包含按钮 有什么办法可以检查是否JPanel包含按钮 如果您有参考JButton call 获取父级 如果父母是null 按钮不在面板 或任何容器 中 或者 按照 kleop
  • 如何在 Nodejs 循环中将值收集到数组中?

    我编写了下面的代码 尝试将视频收集到数组中然后返回 代码是错误的 但我无法找出正确的方法来做到这一点 var redis require redis var client redis createClient app get topvide
  • VS Code:jupyter笔记本逐行运行

    最近 VSCode 进行了更新 之后我的 jupyter 笔记本界面发生了变化 这给我带来了很多问题 现在我不知道如何逐行运行单元格代码等 还有其他方法可以做到这一点吗 或者我怎样才能恢复到旧版本的笔记本电脑 打开命令面板 Windows
  • 从conftest.py访问测试文件名

    我正在尝试做什么 我正在使用 pytest 在 python 中编写一个小框架 作为拆卸的一部分 我正在截取屏幕截图 现在 我希望根据正在运行的测试来命名该屏幕截图 而不是 conftest py 例如 我现在的代码是 driver sav
  • 如何根据另一个字段中的值设置 SharePoint 列表字段中的默认值?

    我在 SharePoint 中有一个自定义列表 特别是 MOSS 2007 其中一个字段是标题为 有缺陷吗 的是 否复选框 另一个字段是 关闭者 指定关闭票证的人 如果没有缺陷 那么我希望票证自动关闭 如果有 则应稍后填写 关闭者 字段 我
  • Typescript :: 相关通用约束

    In React 我有一个像这样的通用界面 interface BaseProps