grpc-node icon indicating copy to clipboard operation
grpc-node copied to clipboard

Re-exported types in grpc-js are not compatible with TypeScript's `--isolatedModules` flag

Open maxsteenbergen opened this issue 2 years ago • 0 comments

Problem description

We are investigating the use of gRPC-JS in a Dockerized NextJS (13) environment with TypeScript. It all works fine in development mode, but when we try to build the application we're hitting a wall where TypeScript complains about gRPC-JS not re-exporting types the way later versions of TypeScript expect it to. The error thrown by TS is the following (the actual file that errors out differs with each approach, either regular build or via Dockerfile)

./node_modules/@grpc/grpc-js/src/experimental.ts:3:3
Type error: Re-exporting a type when the '--isolatedModules' flag is provided requires using 'export type'.

Reproduction steps

Bare example is to load a clean NextJS+TS app, which as of writing comes with Typescript 5.0.2 (but the issue exists at least as early as 4.9.5) We'll have to edit tsconfig.json to enable esnext target and get past the first build errors, but after that it will halt on the bug I described. Workarounds involving weaking tsconfig to set isolatedModules : false or js: react-jsx do not work as they get overruled by the builder.

Repo to clone -> https://github.com/maxsteenbergen/grpcjs-ts-exported-types-bug

Environment

  • macOS 13.2, 2020 Intel iMac
  • Node v18.12.1 via NVM -"@grpc/grpc-js": "^1.8.13"

Additional context

The build works fine if we set ignoreBuildErrors: true in next.config.js, so it's really just a matter of explicitly exporting types to appease TS. Also, you don't have to actually the functions just yet: just importing them somewhere is enough for the error to pop up.

maxsteenbergen avatar Mar 27 '23 13:03 maxsteenbergen