【发布时间】:2025-12-22 22:15:07
【问题描述】:
我在Preact 中使用custom-elements 又名网络组件。问题是 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'.
我遇到了以下可能的解决方案,不幸的是没有工作:
- https://*.com/a/57449556/7664765 - 这是一个与问题无关的答案,但它涵盖了我的问题
我已尝试将以下内容添加到我的 typings.d.ts 文件中:
import * as Preact from 'preact';
declare global {
namespace JSX {
interface IntrinsicElements {
'check-box': any; // The 'any' just for testing purposes
}
}
}
我的 IDE 将导入部分和 IntrinsicElements 显示为灰色,这意味着它没有被使用(?!)并且它无论如何都没有工作。我仍然收到相同的错误消息。
- https://*.com/a/55424778/7664765 - 同样对于反应,我尝试将其“转换”为 preact,我得到了与 1 相同的结果。
我什至在 squoosh 项目中找到了由 google 维护的 file,他们在其中执行以下操作来“填充”支持:
在与组件相同的文件夹中,包含以下内容的
missing-types.d.ts文件,基本上与我的设置相同,但使用index.ts文件而不是check-bock.ts,并且他们使用的是较旧的 TS 版本v3.5.3:
declare namespace JSX {
interface IntrinsicElements {
'range-input': HTMLAttributes;
}
}
我假设他们的构建没有失败,那么它是如何工作的以及如何正确定义自定义元素以在 preact / react 组件中使用它们?
我目前正在使用typescript@v3.8.3 和preact@10.3.4。
【问题讨论】:
标签: typescript web-component custom-element preact