jorgebucaran / getopts

Node.js CLI options parser
MIT License
633 stars 20 forks source link

ESM imports TypeScript types #58

Open pmer opened 2 years ago

pmer commented 2 years ago

If I understand correctly, the TypeScript types are for the CommonJS version of the code. When using "module": "ES2022" in tsconfig.json with allowSyntheticDefaultImports: false, importing getopts fails unless the type definitions are changed from:

export = getopts

to

export default getopts

It might be possible to resolve this by providing different type definitions for CommonJS and ESM (different on only this one line) and using an extension to package.json that TypeScript 4.7 added (link) that lets TypeScript pick between type definition files based on the project's module type.

Alternatively, enabling allowSyntheticDefaultImports for the project seems to fix it, too.

jorgebucaran commented 2 years ago

What about updating the types to support only ES modules? 🤔

pmer commented 2 years ago

Hmm, interesting idea. Personally, I do not feel that I know enough to opine very strongly on this type of thing. Wonder if it would be possible to find open source users of getopts on NPM, then try building them with and without such a change to see if it would cause any disturbances, and by how much. But this is just because I am not an expert in this area!

pmer commented 2 years ago

Looks like Chalk has done this in v5 https://github.com/chalk/chalk/releases

jorgebucaran commented 2 years ago

@pmer Works for me! Do you want to send me a patch with the change? 💯

pmer commented 2 years ago

If I can find the time to test it, would love to! 😀