graphql-hive / graphql-hive/graphql-modules
Can't use TS typedefs on an ESM setup
- 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.