balazsbotond / urlcat

A URL builder library for JavaScript.
https://urlcat.org
MIT License
1.82k stars 57 forks source link

Type definition cannot be resolved under moduleResolution: "NodeNext" #248

Open Jack-Works opened 1 year ago

Jack-Works commented 1 year ago

package.json

{
    "type": "module",
    "dependencies": {
        "typescript": "4.9",
        "urlcat": "^3.1.0"
    }
}

tsconfig.json

{
    "compilerOptions": {
        "module": "NodeNext",
        "moduleResolution": "nodenext",
        "strict": true
    },
    "include": ["./src"]
}

src/index.ts

import urlcat from 'urlcat'
//                 ~~~~~~~~
urlcat()

Reports the following error:

Could not find a declaration file for module 'urlcat'. 'node_modules/urlcat/dist/index.mjs' implicitly has an 'any' type.
  Try `npm i --save-dev @types/urlcat` if it exists or add a new declaration (.d.ts) file containing `declare module 'urlcat';`ts(7016)

Suggested changes to fix this problem

diff --git a/package.json b/package.json
--- a/package.json
+++ b/package.json
@@ -11,8 +11,14 @@
   "types": "dist/index.d.ts",
   "exports": {
     ".": {
-      "import": "./dist/index.mjs",
-      "require": "./dist/index.js"
+      "import": {
+        "types": "./dist/index.d.mts",
+        "default": "./dist/index.mjs"
+      },
+      "require": {
+        "types": "./dist/index.d.ts",
+        "default": "./dist/index.js"
+      }
     },
     "./package.json": "./package.json"
   },

and copy ./dist/index.d.ts to ./dist/index.d.mts

balazsbotond commented 1 year ago

Thank you for taking the time to open this issue and suggest fixes to the problem. I kindly ask that you consider creating a pull request with your suggested changes, so that we can review and discuss them further.

Thank you again for your contribution!

Jack-Works commented 1 year ago

Thank you for taking the time to open this issue and suggest fixes to the problem. I kindly ask that you consider creating a pull request with your suggested changes, so that we can review and discuss them further.

Hi, my suggestion needs to copy the output file, which requires changing the build step, I don't know if that is good.

omarkhatibco commented 1 year ago

if you use patch-package you could make it works by adding to package.json

-      "require": "./dist/index.js"
+      "require": "./dist/index.js",
+      "types": "./dist/index.d.ts"
devnomic commented 10 months ago

Same issue with moduleResolution bundler typescript 5+. There is no type definition.

Could not find a declaration file for module 'urlcat'. '/hello/node_modules/urlcat/dist/index.mjs' implicitly has an 'any' type.
trevorsmith commented 9 months ago

I've created a PR to fix this issue: #264

benfoster commented 4 months ago

Any plans to merge the above?

ethansimmons commented 1 month ago

I'm running to this issue, is there a workaround, or a library that works better with typescript.

alii commented 1 month ago

@ethansimmons while I owe a lot of thanks to urlcat over the years, I've started working on my own version to replace it called pathcat https://www.npmjs.com/package/pathcat

I've also left a note of recognition to urlcat in the readme of pathcat 🙂