我有一个程序包,其中包含几个Web组件。它还为它们公开了JSX类型,以便它们可以在React中使用,而不会抱怨TypeScript。安装依赖项后,文件夹结构如下所示:
./node_modules/
my-pacakge/
src/...
index.d.ts
package.json
// package.json
{
...
"types": "./index.d.ts",
...
}
// index.d.ts
declare namespace JSX {
export interface IntrinsicElements {
'my-component': any,
'my-other-component': any,
'my-third-component': any
}
}
当我尝试在JSX中使用<my-component></my-component>
时,出现错误Property 'my-component' does not exist on type 'JSX.IntrinsicElements'.
如果我手动将index.d.ts
文件复制到./node_modules/@types/my-package/index.d.ts
,则错误消失了。
如果我在代码中的任何地方放置import 'my-package';
,那么错误也会消失。
我想知道是否有一种方法可以让TypeScript看到我的类型,而无需在@types
存储库中单独发布模块或在代码中添加导入。该软件包提供的Web组件通常是通过script标签插入的,因此对软件包进行显式导入只是为了让TypeScript挑选类型感到奇怪。
答案 0 :(得分:0)
我不认为您会找到比将导入内容放入代码中更好的解决方案。
请注意,默认情况下,TypeScript的types
mechanism自动加载@types
范围内软件包的主类型声明文件(在主npm注册表上对应于DefinitelyTyped),但是此功能不适用于其他包装。我认为这是因为有多个DefinitelyTyped软件包(例如@types/node
)为特定的目标环境提供了全局声明,并且在无需用户编写/// <reference types="node"/>
的情况下加载这些声明的便利性被认为超过了发生事故的风险,但对于任意非@types
软件包,则认为不适用。您可以尝试通过将主node_modules
目录添加到typeRoots
来获得加载所有程序包的机制,但是仅使用导入可能更明智。