# 类型提示 就像 NPM Package 一样,{props.name || 'Module Federation'} 产物同样会生成类型,并且享有类型热加载,尽管产物托管在远程 CDN 上。 {props.pkgName || '@module-federation/enhanced'} 默认开启类型提示功能,本文将介绍几种常见的使用场景以及具体配置。 ## 使用场景 ### 生成类型 使用{props.pkgName || '@module-federation/enhanced'} 提供的构建插件进行构建,会自动生成类型文件。 ### 加载类型 1. 消费者修改 `tsconfig.json` 在 `tsconfig.json` 添加 `paths` : ```json { "compilerOptions": { "paths": { "*": ["./@mf-types/*"] } } } ``` 2. 启动消费者和生产者 > info: 不需要关注生产者和消费者的启动顺序 启动后,消费者会自动取拉取生产者的类型文件。 ### 类型热重载 修改生产者代码后,消费者会自动拉取生产者的类型。 hot-types-reload-static ### Runtime API 类型提示 :::info 如果构建器为 `webpack` ,还需要再 [watchOptions.ignored](https://webpack.js.org/configuration/watch/#watchoptionsignored) 增加 `**/@mf-types/**`,以避免类型更新导致的循环编译问题 ::: 需要在 `include` 字段增加 `./@mf-types/*` 以享有 `Runtime` `loadRemote` 类型提示以及类型热重载 ```json title="tsconfig.json" { "include": ["./@mf-types/*"] } ``` hot-types-reload ### 第三方包类型抽取 {props.name || 'Module Federation'} 会自动抽取第三方包类型,确保 `exposes` 文件类型能正常访问。 third-party ### 嵌套类型重导出 {props.name || 'Module Federation'} 支持嵌套 remotes ,并会自动抽取嵌套的 remotes 类型。 nested-remote ### 动态类型提示 {props.name || 'Module Federation'} 支持加载动态类型,并且通用支持热更新。 dynamic-remote-hot-types-reload {props.dynamic} ## 配置 - [dts](/zh/configure/dts.md):类型生成/加载 - [dev](/zh/configure/dev.md):类型热重载 ## FAQ ### 项目循环编译,无法终止 A: 大概率是编译器监听了类型文件夹或者 `dist` 里的变动导致,将 `@mf-types` 添加至忽略文件即可。 以 webpack/rspack 为例: ```ts config.watchOptions = { ignored: ['**/node_modules/**', '**/@mf-types/**'], }; ``` ### 2. 没有生成类型文件,如何查看原因 **解决方案** 1. 在项目启动命令前加上 `FEDERATION_DEBUG=true` 环境变量 2. 设置 [dts.displayErrorInTerminal](/zh/configure/dts.md#displayerrorinterminal) 为 `true` 3. 启动项目,查看控制台输出 4. (可选)若控制台没输出错误,查看 `.mf/typesGenerate.log` 日志文件