在 Preact 和 typescript 中使用 Web 组件

2023-12-25

我在用着自定义元素 https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements又称为网络组件Preact https://preactjs.com/。问题是 Typescript 抱怨元素没有被定义在JSX.IntrinsicElements- 在这种情况下check-box元素:

<div className={styles.option}>
    <check-box checked={this.prefersDarkTheme} ref={this.svgOptions.darkTheme}/>
    <p>Dark theme</p>
</div>

错误信息(省略路径):

ERROR in MyComponent.tsx
[tsl] ERROR in MyComponent.tsx(50,29)
      TS2339: Property 'check-box' does not exist on type 'JSX.IntrinsicElements'.

我遇到了以下可能的解决方案,不幸的是不起作用:

  1. https://stackoverflow.com/a/57449556/7664765 https://stackoverflow.com/a/57449556/7664765 - 这是一个与问题无关的答案,但它涵盖了我的问题

我尝试将以下内容添加到我的typings.d.ts file:

import * as Preact from 'preact';

declare global {
    namespace JSX {
        interface IntrinsicElements {
            'check-box': any; // The 'any' just for testing purposes
        }
    }
}

我的 IDE 将导入部分灰显并IntrinsicElements这意味着它没有被使用(?!)并且它无论如何也不起作用。我仍然收到相同的错误消息。

  1. https://stackoverflow.com/a/55424778/7664765 https://stackoverflow.com/a/55424778/7664765 - 同样对于react,我尝试将其“转换”为preact,并且得到了与1相同的结果。

我什至找到了一个file https://github.com/GoogleChromeLabs/squoosh/blob/master/src/custom-els/RangeInput/missing-types.d.ts由 google 维护squoosh https://github.com/GoogleChromeLabs/squoosh他们在项目中执行了以下操作来“填充”支持:

与组件 a 位于同一文件夹中missing-types.d.ts文件包含以下内容,基本上与我的设置相同,但带有index.ts文件而不是check-bock.ts他们正在使用旧的 TS 版本v3.5.3:

declare namespace JSX {
  interface IntrinsicElements {
    'range-input': HTMLAttributes;
  }
}

我假设他们的构建没有失败,那么它是如何工作的以及如何正确定义自定义元素以在 preact/react 组件中使用它们?

我目前正在使用[email protected] /cdn-cgi/l/email-protection and [email protected] /cdn-cgi/l/email-protection.


以下是要使用的正确属性,否则传递时会出错key例如。

declare global {
  namespace JSX {
    interface IntrinsicElements {
      'xx-element1': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>; // Normal web component
      'xx-element2': React.DetailedHTMLProps<React.HTMLAttributes<HTMLInputElement>, HTMLInputElement>; // Web component extended from input
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Preact 和 typescript 中使用 Web 组件 的相关文章

随机推荐

  • TIdHTTP:选择 HTTP 请求的传出 IP?

    我有一台机器 有几个不同的静态IP 是否可以通过以下方式选择 HTTP 请求的传出 IP 地址TIdHTTP Indy 印地的新版本有BoundIP idHttp1 BoundIP 144 33 34 212
  • 在类型系统的上下文中什么是“种类”?

    我已经阅读了维基百科文章并搜索了明显的地方 但我被困住了 有人可以简单地告诉我 Kind 到底是什么吗 它是干什么用的 Scala 示例最受欢迎 简而言之 kind is to types what a type is to values
  • 禁止系统使用 Meteor 帐户?

    我正在使用 Meteor 开发一个聊天应用程序 它使用 account ui 和 account twitter 我希望能够禁止人们滥用该网站 但我不确定如何做到这一点 或者是否可能 有没有办法做到这一点 这是我用来运行聊天应用程序部分的代
  • ScrollView 布局或其RelativeLayout 父级可能没用

    我正在开发 Android 4 及以上版本的应用程序 一层生成此警告 此 ScrollView 布局或其relativelayout 父级可能是无用的 将背景属性传输到另一个视图
  • 使用 css 设置表格中最后一个 td 的样式

    我想设置表中最后一个 TD 的样式 而不在特定 TD 上使用 CSS 类 table tbody tr td One td td Two td td Three td td Four td td Five td tr tbody table
  • 为什么洗牌 list(range(n)) 比洗牌 [0]*n 慢?

    Using random shuffle 我注意到洗牌list range n 比洗牌多花费约 25 的时间 0 n 这是尺寸的时间n从 100 万到 200 万 为什么是洗牌list range n 慢点 与对列表进行排序 需要查看对象
  • Sequelize 复合外键

    我有一个包含下表的数据库 CREATE TABLE IF NOT EXISTS app user user id INT NOT NULL user name VARCHAR 45 NOT NULL PRIMARY KEY user id
  • 推送到 git 存储库子文件夹上的远程源?

    我有一个 git 存储库 它使用 Vagrant 为 WordPress 项目构建虚拟服务器 仅限本地开发 文件夹结构大致如下 出于问题的目的 Vagrantfile puppet wordpress www public folder r
  • facebook“发送”按钮打开一个空白框

    我的网站是 alonsart com 当单击我网站上的发送按钮时 它会打开一个空白框 这就是我的代码的样子 div div
  • 混合混合模式在应用于一个元素但不适用于另一元素时起作用

    我在用mix blend mode在 css 生成的内容上创建倍增的背景效果 当我将这个生成的元素应用到外部包装器时 它具有预期的效果 standard cover background blue color fff position ab
  • 如何浅拉按分支名称跟踪的子模块

    您好 我有一个包含子模块的超级项目 子模块通过分支名称而不是 sha 提交号进行跟踪 在我们的构建服务器上 我想尽可能少地拉动 所以我尝试了 git submodule update remote init 然而这并不肤浅 似乎拉出所有内容
  • IteratorGetNext 上的 TensorFlow 性能瓶颈

    在摆弄 TensorFlow 时 我注意到一个相对简单的任务 批处理一些 3D 加速度计数据并获取每个周期的总和 的性能相对较差 一旦我得到了 非常漂亮 这就是我所运行的本质 Timeline https stackoverflow com
  • 为什么 F5 在 Visual Studio 中执行之前不重建项目?

    If I press F5 my project runs but it doesn t see any of the changes that I made I need to manually re build before press
  • 如何将一个库静态链接到另一个静态库?

    我有 2 个具有不同版本 MinGW 的构建环境 一种为 Qt 配置 另一种则没有 然而 两者都有 Qt 的存根静态库 最终实际上链接到 dll 问题是我想在Qt MinGW中构建一个静态库 然后将其包含在非Qt MinGW中 当我尝试时
  • 如何实现logstash配置的单元或集成测试?

    使用logstash 1 2 1 人们现在可以有条件地做各种事情 如果管理许多日志文件并实现指标提取 即使是早期版本的 conf 文件也会变得复杂 看完之后这个全面的 http untergeek com 2013 09 11 gettin
  • 如何按最小增量(或接近最小增量)改变浮点数?

    我有一个double value f并希望有一种方法将其稍微放大 或缩小 以获得一个尽可能接近原始值但仍严格大于 或小于 原始值的新值 它不必接近最后一位 更重要的是 我所做的任何更改都保证产生不同的值 而不是舍入到原始值 检查你的 mat
  • jQuery DatePicker 填充输入 - 多次点击问题

    所以 我最近面临的困境是 我使用 jQuery DatePick 不是 DatePicker 来选择日期并用这些日期填充输入字段 问题是每次我单击日期时输入字段都会被填充 因此 如果我单击第 23 个 然后再次单击它以取消选择它 它会自动添
  • 正则表达式重用一个模式来捕获多个组?

    我想多次匹配某个模式 就像描述的那样here https stackoverflow com questions 41878948 is it possible to define a pattern and reuse it to cap
  • 为 NSTextField 设置边框

    哇 我真的掉进兔子洞了 我试图在 UI 部分的背景上添加文本 并将文本字段作为另一部分 例如生日在 然后我想重新调整该文本字段的用途以允许输入文本 所以我做了类似的事情 myTextFieldName editable true myTex
  • 在 Preact 和 typescript 中使用 Web 组件

    我在用着自定义元素 https developer mozilla org en US docs Web Web Components Using custom elements又称为网络组件Preact https preactjs co