Type Hinting

Just like an NPM Package, Module Federation artifacts also generate types and enjoy hot-reloading of types, even though the artifacts are hosted on a remote CDN.

@module-federation/enhanced has type hinting enabled by default. This article will introduce several common usage scenarios and their specific configurations.

Usage Scenarios

Generating Types

When building with the build plugin provided by @module-federation/enhanced, type files are automatically generated.

Loading Types

  1. Consumer modifies tsconfig.json and adds paths:
{
  "compilerOptions": {
    "paths": {
      "*": ["./@mf-types/*"]
    }
  }
}
  1. Start the applications

After starting, the consumer will automatically fetch the producer's type files.

Tip

You don't need to worry about the startup order of the producer and consumer.

Type Hot Reloading

After modifying the producer's code, the consumer will automatically fetch the producer's types.

hot-types-reload-static

Runtime API Type Hinting

Add ./@mf-types/* to the include field to enjoy Runtime loadRemote type hinting and type hot reloading:

tsconfig.json
{
  "include": ["./@mf-types/*"]
}

hot-types-reload

Info

When the builder is webpack, add **/@mf-types/** to watchOptions.ignored to avoid circular compilation issues caused by type updates.

Third-Party Package Type Extraction

Module Federation automatically extracts third-party package types to ensure that exposes file types can be accessed normally.

third-party

Nested Type Re-export

Module Federation supports nested remotes and will automatically extract the types of nested remotes.

nested-remote

Dynamic Type Hinting

Module Federation supports loading dynamic types and also supports hot updates.

dynamic-remote-hot-types-reload

Configuration

  • dts: Type generation/loading
  • dev: Type hot reloading

FAQ

Project has circular compilation and cannot be terminated

This is likely caused by the compiler watching changes in the type folder or the dist directory. Add @mf-types to the ignored files. For example, with webpack/rspack:

config.watchOptions = {
  ignored: ['**/node_modules/**', '**/@mf-types/**'],
};

No type files are generated, how to find the reason?

  1. Add the FEDERATION_DEBUG=true environment variable before the project startup command.
  2. Set dts.displayErrorInTerminal to true.
  3. Start the project and check the console output.
  4. (Optional) If there is no error in the console, check the .mf/typesGenerate.log log file.