jorgebucaran/getopts

ESM imports TypeScript types

pmer opened this issue · 5 comments

pmer commented

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.

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

pmer commented

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

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

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

pmer commented

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