graphql-hive / graphql-hive/graphql-modules

Can't use TS typedefs on an ESM setup

Open
#2,365 12 comments 2 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
1.3k
Forks
113
Avg merge
3h 36m
Merged PRs (30d)
1

Description

**Describe the bug**

I am not able to use the TypeScript type definition files when my Node 18 project is setup with ESM support enabled. TypeScript compilation will produce the following error:

Could not find a declaration file for module 'graphql-modules'. '/workspace/node_modules/graphql-modules/index.mjs' implicitly has an 'any' type.
There are types at '/workspace/node_modules/graphql-modules/index.d.ts', but this result could not be resolved when respecting package.json "exports". The 'graphql-modules' library may need to update its package.json or typings.

**To Reproduce**

Steps to reproduce the behavior:

`package.json` (abbreviated):

```json
{
"type": "module",
"devDependencies": {
"typescript": "~5.0"
}
}
```

`tsconfig.json` (abbreviated):

```json
{
"compilerOptions": {
"module": "node16",
"moduleResolution": "node16"
}
}
```

In any `ts` file the following will produce the TypeScript error:

```js
import { createModule, gql } from "graphql-modules";
```

**Expected behavior**

An import should use the expected type definition files.

**Environment:**

- OS: MacOS 12.6.6
- `@graphql-modules/...`: `2.1.2`
- NodeJS: `18.16.0`

**Additional context**

Was able to find some documentation on how to reference typedefs in the new `exports` feature: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-7.html#packagejson-exports-imports-and-self-referencing

For what it's worth looking at the current `graphql-modules` `package.json` file, it currently has the following:

```json
{
"main": "index.js",
"module": "index.mjs",
"typings": "index.d.ts",
"typescript": {
"definition": "index.d.ts"
},
"exports": {
".": {
"require": "./index.js",
"import": "./index.mjs"
},
"./*": {
"require": "./*.js",
"import": "./*.mjs"
},
"./package.json": "./package.json"
}
}
```

The `graphql` package at version `16.6.0` seems to be working correctly. It currently has the following:

```json
{
"main": "index",
"module": "index.mjs",
"typesVersions": {
">=4.1.0": {
"*": [
"*"
]
},
"*": {
"*": [
"NotSupportedTSVersion.d.ts"
]
}
}
}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.