unfetch icon indicating copy to clipboard operation
unfetch copied to clipboard

Typescript issue: weird dependency on node-fetch in declaration file

Open 1999 opened this issue 7 years ago • 9 comments

First of all thanks for awesome polyfill @developit. It's brilliant and altogether with preact it makes a perfect match for our product bundle!

As for this issue I'm not sure why there's a dependency on node-fetch in declaration file. When I try to use unfetch in my TS code I get this:

ERROR in [at-loader] ./node_modules/unfetch/src/index.d.ts:6:8 
        TS7016: Could not find a declaration file for module 'node-fetch'. '/Users/dsorin/.../node_modules/node-fetch/index.js' implicitly has an 'any' type.
      Try `npm install @types/node-fetch` if it exists or add a new declaration (.d.ts) file containing `declare module 'node-fetch';`

I know this can be fixed by installing typings for node-fetch but this leads to a further questions like "what's this typing doing in our dependencies if we don't use node-fetch package? let's remove it".

1999 avatar Oct 13 '18 10:10 1999

Maybe @niedzielski knows the answer as the git blame author for this commit?

1999 avatar Oct 13 '18 10:10 1999

It was probably a mistake. Our project at the time was using isomorphic-unfetch which already specified node-fetch as a dependency and I likely conflated them. I see a definition of fetch in the TypeScript DOM library that can probably be used instead. I wish I could remember more detail but I think at the time there was also a difference in the quality of the typings and node-fetch provided something over fetch but that really only mattered to isomorphic-unfetch clients.

niedzielski avatar Oct 13 '18 16:10 niedzielski

Gotcha. Are you okay if I send a PR to improve this?

1999 avatar Oct 13 '18 22:10 1999

@1999, sure, I'm just a random contributor. It's up to @developit to merge it, of course! You may wish to validate that whatever replacement you choose maintains compatibility with isomorphic-unfetch in a headless Node.js environment without extra dependencies.

After thinking on this further and looking at the files in the files in my PR, I forgot that this repo actually houses both unfetch and isomorphic-unfetch. Maybe one complication I had was that my headless server code didn't use the TypeScript DOM library so it didn't have access to that fetch definition but I did have access to node-fetch typing in both client and server? Sorry, but I can't remember the details.

niedzielski avatar Oct 13 '18 23:10 niedzielski

Fair enough 👍

1999 avatar Oct 14 '18 09:10 1999

Is this why I'm getting a TypeScript error when I compile my project?

node_modules/unfetch/src/index.d.ts:7:8 - error TS2307: Cannot find module 'node-fetch' or its corresponding type declarations.

7 } from "node-fetch";
         ~~~~~~~~~~~~

If the typings in @types/node-fetch work, I don't know why it's a problem to just reuse those? But either way, it's currently an undeclared dependency - you have to get a build failure and then manually install the package, so I think either that should be fixed, or the dependency should be removed?

(I don't use the isomorphic stuff, so it's all the same to me - but having a broken dependency definitely isn't great.)

mindplay-dk avatar Aug 02 '21 10:08 mindplay-dk

Same thoughts, my TypeScript build is breaking when using isomorphic-unfetch as a dependency. Even after an npm install --dev @types/node-fetch my TypeScript build is still broken.

Error: node_modules/isomorphic-unfetch/index.d.ts:7:8 - error TS7016: Could not find a declaration file for module 'node-fetch'. '/Users/dawsonbotsford/code/earn/essential-eth/node_modules/node-fetch/lib/index.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/node-fetch` if it exists or add a new declaration (.d.ts) file containing `declare module 'node-fetch';`

7 } from "node-fetch";

Any thoughts on fixing this in the core package?

dawsbot avatar Sep 18 '21 15:09 dawsbot

node_modules/isomorphic-unfetch/index.d.ts:7:8 - error TS7016: Could not find a declaration file for module 'node-fetch'. '/workspace/node_modules/node-fetch/lib/index.js' implicitly has an 'any' type.
  Try `npm i --save-dev @types/node-fetch` if it exists or add a new declaration (.d.ts) file containing `declare module 'node-fetch';`

7 } from "node-fetch";
         ~~~~~~~~~~~~

This event can probably be cured by

npm i --save-dev @types/[email protected]

nmemoto avatar Oct 30 '21 15:10 nmemoto

any progress?

kaichii avatar Jan 17 '22 02:01 kaichii