如何正确声明一个 react + ts 组件包?
组件
const MyComponent = () => {
return <div>hi</div>;
};
export default MyComponent;
package.json
{
"name": "my-library",
"type": "module",
"module": "./dist/main.es.js",
"types": "./types/index.d.ts",
"typings": "./types/index.d.ts",
"exports": {
".": {
"import": "./dist/main.es.js"
}
},
index.d.ts
declare module "my-library";
使用
import DDD from "my-library";
export default function Demo() {
return (
<>
<DDD />
</>
);
}
目前在使用的时候报错
Could not find a declaration file for module 'my-library'. '/my-library/dist/main.es.js' implicitly has an 'any' type.
There are types at '/demo/node_modules/my-library/types/index.d.ts', but this result could not be resolved when respecting package.json "exports". The 'my-library' library may need to update its package.json or typings.
1 import DDD from "my-library";
如何在 index.d.ts 文件中正确声明这个组件
回复
1个回答
test
2024-06-29
declare module "my-library" {
import { FunctionComponent } from 'react';
const MyComponent: FunctionComponent;
export default MyComponent;
}
FunctionComponent
是 React 提供的类型,它表示一个函数组件。在这个声明文件中,我们声明 "my-library" 模块有一个默认导出,它是一个函数组件。
然后在你的 package.json 文件中,确保 "types" 和 "typings" 字段指向这个声明文件:
{
"name": "my-library",
"type": "module",
"module": "./dist/main.es.js",
"types": "./index.d.ts",
"typings": "./index.d.ts",
"exports": {
".": {
"import": "./dist/main.es.js"
}
}
}
这样,当其他 TypeScript 项目使用 "my-library" 模块时,TypeScript 就会找到这个声明文件,知道这个模块提供了一个默认导出,它是一个函数组件,然后就能进行类型检查了。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容