TypeScript 类型排除泛型参数为“any”的类型

2023-12-05

这是一个分支React FunctionComponent 的 TypeScript 类型恰好返回一个 IntrinsicElement.

React 定义

declare namespace JSX {
  type Element = React.ReactElement<any, any>;
}

虽然我找不到它@types/react/index.d.ts,渲染一个<Fragment>返回一个JSX.Element。因此,如果我想为一个返回恰好一个 HTML 元素(即不是Fragment除非它只有一个孩子,这会破坏它的目的),我需要以某种方式将我的返回类型限制为类似

type IntrinsicFC = 
  () => Exclude<JSX.IntrinsicElements[keyof JSX.IntrinsicElements], ReactElement<any, any>>;

(Note: Exclude<..., ReactElement<any, any>> does not意思就是我所期望的;它似乎与JSX.IntrinsicElements[keyof JSX.IntrinsicElements]虽然我不明白为什么。但是,为了这个问题,假设我did知道我试图表达的内容的正确类型。)

然而,any是强类型的消亡,并且由于每个 HTML 元素都扩展了ReactElement<any, any>,这会让我的类型() => never.

有没有办法排除作为类型别名的类型SomeGenericType<any>?

我最近一次失败的尝试IntrinsicFC is:

type IntrinsicElement = JSX.IntrinsicElements[keyof JSX.IntrinsicElements];

type IntrinsicFC<P = void> =
  ((props: P) => IntrinsicElement) extends ((props: P) => JSX.IntrinsicElements[infer U & keyof JSX.IntrinsicElements])
    ? U extends keyof JSX.IntrinsicElements
      ? ((props: P) => JSX.IntrinsicElements[U])
      : never
    : never;

然而,这会导致type IntrinsicFC<P = {}> = never;, 因为IntrinsicElement always延伸JSX.IntrinsicElements[keyof JSX.IntrinsicElements]因为它的定义完全相同。

TS游乐场


我怀疑React团队在写声明文件时,他们的意思是JSX.Element定义为

type Element = React.ReactElement<unknown>;

但该类型早于 TypeScript v3.0.0,即介绍了unknown type,现在改变它将是一个突破性的改变。但是,我只是尝试手动更改类型声明,但仍然不起作用,所以......????‍♀️


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript 类型排除泛型参数为“any”的类型 的相关文章

随机推荐

  • ASP.NET MVC:使用 JsonResult 控制属性名称的序列化

    有没有办法控制 JSON 输出JsonResult具有属性 类似于您可以使用的方式XmlElementAttribute及其兄弟来控制 XML 序列化的输出 例如 给定以下类 public class Foo SomeJsonSeriali
  • MySQL:带有 ORDER BY COUNT 的 GROUP_CONCAT?

    这可能吗 假设我有一个地址列表 其中有很多重复的条目 我需要过滤掉所有重复项 因为有些地址的名称略有不同 但邮政编码和电话号码相同 首先 我对邮政编码和电话进行 GROUP BY SELECT name address postalcode
  • 如何使用 AWS Cloudformer 为现有 API 网关创建云形成模板?

    我已经使用 aws 控制台创建了一个 api 网关 我想使用以下方法为我的 api 网关生成 CloudFormation 模板云形成者 请帮忙 尽管 AWS 尚未发布官方声明 但 CloudFormer 似乎已终止生命周期 AWS 没有正
  • 使用正则表达式匹配编辑(重新编码、折叠、排序)因子级别

    我发现在 R 中操作因子变量过于复杂 清洁因素时我经常想做的事情包括 排序级别 不仅设置参考类别 而且将所有级别按逻辑 非字母顺序 排列为汇总表 x lt factor x levels new order 重新编码 重命名因子级别 简化名
  • iOS 中 NSOperation 和 NSOperationQueue 的后台任务

    我想上传一些文件 即使应用程序进入后台 这些文件也应该继续 目前 我正在从数据库检索文件 然后通过 NSOperation 将其添加到队列中 然后启动上传过程 即使应用程序进入后台或前台 也应上传所有文件 下面是单个任务的代码 任何人都可以
  • 如何找到 log4j 默认初始化中使用的 URL?

    Log4j默认初始化通过一个过程来查找并使用 URL 进行配置 之后 您如何才能找出最终使用的 URL 而无需自己编写相同的过程 如果您必须自己编写代码 您可能不会得到与 log4j 完全相同的结果 而且它可能会在未来的版本中发生变化 如果
  • 如何使用 Rails 发送电子邮件

    这可能非常直接和简单 但我是 ruby on Rails 的新手和菜鸟 我有一个简单的电子邮件 php 脚本 我在旧网站上使用过 但现在由于我已经转换为 Rails 我不确定如何创建与之等效的脚本 我尝试使用rails generate m
  • 为什么 echo 与 printf 结合显示错误的输出? [复制]

    这个问题在这里已经有答案了 有谁知道为什么当我执行此操作时 usr bin php 我明白了 1005 1005 1005 1005 1005 1005 你在混合echo and printf printf返回格式化字符串的长度 所以你的e
  • django-nonrel 和管理页面

    我正在尝试在 AppEngine 上为我的网站设置 Django 管理套件 但它不起作用 我正在使用 django nonrel 设置与 我网站的其余部分似乎工作正常 但我需要让管理员工作 以便我可以开始使用数据存储区 这是我得到的错误 D
  • 格式化 Emacs 函数中的标头以将缓冲区打印到 PDF(带换行)

    Rupert Swarbrick 提出了以下三个函数来将 Emacs 缓冲区打印为 pdf 其中行被换行 使用时通常不会出现这种情况 ps print 功能 问题是这个函数要实现换行 必须复制当前缓冲区 这有效地破坏了ps print bu
  • 使用C将exec进程发送到后台?

    我的问题听起来与此相同 但事实并非如此 在Linux中用C在后台启动一个进程 我知道如何执行 fork 但不知道如何将进程发送到后台 我的程序应该像一个简单的命令 unix shell 一样工作 支持管道和后台进程 我可以做管道和叉子 但我
  • Selenium WebDriver 获取文本

    我有一个 div 0 div 我尝试编写 myDiv 的测试0其中的文字 使用 WebDriver 是 String text webDriver findElement By xpath div name myDiv getText 但在
  • 通过单点登录进行身份验证后移至 Facebook 应用程序页面

    我正在开发一个应用程序 需要集成 Facebook 的社交功能 我想要的是使用 SSO 单点登录 功能 当用户按下我的应用程序中的按钮时 网络视图将打开并向他显示我在 Facebook 中的应用程序页面 在用户进行身份验证后 现在他可以像其
  • React WebApp 调用 NestJS 后端中使用 PassportStrategy 的 Google 登录无法正常工作

    我已经在 NestJS 后端中使用 PassportStrategy 实现了 Google 登录 NestJS 后端开发基于此指南 https medium com nielsmeima auth in nest js and angula
  • 类中ShouldSerialize()的重构...我可以使用IContractResolver吗?

    我有一个返回大量汽车功能的 API 全部都是布尔值或整数 基本上我只想显示返回真值或整数 gt 0 的 API 我正在使用 JSON net 因此我可以使用 ShouldSerialize 属性来确定是否应该根据属性的值序列化该属性 我的代
  • Django cookie 没有保存在浏览器上

    我正在使用 React 和 Django 制作一个应用程序 当我使用 django 登录时 我在 cookie 中设置了令牌 但浏览器中未设置 Django 响应 cookie 我试图努力调试它但不能 不知道我哪里做错了 Request U
  • 如何在 jQuery UI Slider 设置 3 种不同的颜色

    我正在用这个用户界面滑块 我必须用 3 种不同的颜色来制作这个滑块 手柄颜色 句柄的前一部分 句柄的下一部分 Something like this 到目前为止 我只能设置手柄颜色 但是 如何设置另外两种不同的颜色 一个用于手柄的前一部分
  • 循环多维数组并删除某些键

    我有一个基于下面数组的嵌套树结构 Array 1 gt Array id gt 1 parent gt 0 name gt Startpage uri gt 125 basename gt index php child gt 23 gt
  • 使用外部库将 Jar 转换为 exe

    我一直在尝试将 jar 转换为 exe 该程序 jar 使用蓝牙库 Bluecove 它是某个目录中的另一个 jar 该程序还使用 Java Swing 通常JFrame和东西 当从 Netbeans 或 Eclipse 中运行时 该程序可
  • TypeScript 类型排除泛型参数为“any”的类型

    这是一个分支React FunctionComponent 的 TypeScript 类型恰好返回一个 IntrinsicElement React 定义 declare namespace JSX type Element React R