Gre*_*rel 5 module typescript reactjs
在下面的文件夹结构中,我想以App.tsx
这种方式导入我的组件:
import MyComponent from './MyComponent';
Run Code Online (Sandbox Code Playgroud)
package.json
尽管我的文件设置了属性,但 Typescript 仍会抛出错误main
:
找不到模块“./MyComponent”`
文件夹结构:
src/
|- App.tsx
|- MyComponent/
| |- MyComponent.tsx
| |- package.json
| |- ...
Run Code Online (Sandbox Code Playgroud)
我的组件.tsx:
export default class extends Component {
...
}
Run Code Online (Sandbox Code Playgroud)
包.json:
{
"name": "my-component",
"version": "0.0.0",
"main": "MyComponent.tsx"
}
Run Code Online (Sandbox Code Playgroud)
如果我更改MyComponent.tsx
为,它会起作用,但我认为inindex.tsx
的目的是完全做我正在尝试的事情。谢谢!main
package.json
该main
字段仅支持解析具有.js
扩展名的模块,并且该types
字段(TypeScript 类似于main
)支持.d.ts
字段。TypeScript模块解析文档仅描述这些扩展的用法。
其背后的原因是这些字段旨在与已发布的包一起使用。.ts
(或者.tsx
在您的情况下)文件是旨在转换为生产就绪的 JavaScript(和帮助器元数据文件)的开发文件。如果已发布的包甚至包含.ts
文件(而不是它们生成的.d.ts
、.js
和.js.map
输出),则尝试要求这些文件将是非常不可取的。
你的 TypeScript 在执行之前总是会被转换为 JS。编译器对 TypeScript 文件的简化包含的支持假设这些包含也在运行时之前进行了转译。
只要您tsconfig.json
配置为输出声明(和源映射)文件:
"compilerOptions": {
"declaration": true,
"sourceMap": true,
...
Run Code Online (Sandbox Code Playgroud)
您可以将main
和types
字段指向输出文件:
"main": "myComponent.js",
"types: "myComponent.d.ts",
Run Code Online (Sandbox Code Playgroud)
一旦创建了这些文件,它们就会正确解析。请注意,这意味着如果您正在使用任何编码辅助,通常意味着您必须重新编译才能获得更新的提示。
如果您想要自动代码帮助,这index.tsx
可能是更好的路线。如果您确实想避免连续编辑多个index.tsx
文件,您可以让它们重新导出模块:
export * from '/MyComponent';
Run Code Online (Sandbox Code Playgroud)
编辑:包括实际的解决方案...
归档时间: |
|
查看次数: |
1805 次 |
最近记录: |