rollup / plugins

🍣 The one-stop shop for official Rollup plugins
MIT License
3.64k stars 591 forks source link

[typescript]: Default export type not being picked up with `module: "nodenext"` #1329

Open wight554 opened 2 years ago

wight554 commented 2 years ago

Expected Behavior

Typing should be picked-up

Actual Behavior

This expression is not callable.
  Type 'typeof import("/Users/Volodymyr_Zhdanov/playground/blog-template/node_modules/@rollup/plugin-typescript/types/index")' has no call signatures.

Additional Information

Steps to reproduct:

  1. Add these settings to tsconfig:
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
  2. Add "type": "module" to package.json
  3. Import and use typescript plugin
  4. See the error

3 possible fixes:

  1. Add named export for plugin
  2. Use CJS styled export in typings: export default function typescript => export = typescript;
  3. Use declaration merging to make default export namespace and function simultaneously, example here: https://github.com/fastify/fastify-cookie/pull/184

I've used this thin wrapper for fixing typings before, might be helpful: https://github.com/wight554/vite-plugin-typescript/blob/main/index.d.ts

unional commented 1 year ago

1375

Polve commented 1 year ago

I have the same problem: are there any workarounds before an official support is complete?

wight554 commented 1 year ago

I have the same problem: are there any workarounds before an official support is complete?

Seems like this one is completely ignored. When I created issue without repro I received feedback immediately. No one checked this issue since I wasted my time on repro

Polve commented 1 year ago

I'm sorry I don't understand what you mean, exactly: I'm unable to understand any of your workarounds: are you saying I ignored them?

rijkvanzanten commented 1 year ago

Ran into this as well.. Too bad it's ignored!

For now, I'm using the following hacky workaround:

import virtualDefault from '@rollup/plugin-virtual';
import aliasDefault from '@rollup/plugin-alias';

const virtual = virtualDefault as unknown as virtualDefault.default;
const alias = aliasDefault as unknown as aliasDefault.default;
DetachHead commented 1 year ago

adding "type": "module" to the plugin's package.json seems to fix this, but i'm not sure if that's the correct solution since i'm not too familiar with esm

cowwoc commented 1 year ago

Per https://github.com/algolia/algoliasearch-client-javascript/issues/1431#issuecomment-1568529321 and https://arethetypeswrong.github.io/ the problem is not necessarily node.js, but rather the export statement.

I can't say I fully understand it myself, but take a look.

lazarljubenovic commented 1 year ago

I've described the issue in more detail here https://github.com/rollup/plugins/issues/1541, including the exact reason why it happens and the way to fix it (skip over to "Additional Details" for it). I'm not familiar enough with this repository to write a fix, since it's almost entirely about the way the packages are distributed, and not the code itself.

shellscape commented 1 year ago

OK. Just be aware this is unlikely to see a resolution without community contribution

benmccann commented 1 year ago

Setting up publint for the package would also catch this. For example: