plugins icon indicating copy to clipboard operation
plugins copied to clipboard

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

Open wight554 opened this issue 3 years ago • 10 comments

  • Rollup Plugin Name: @rollup/plugin-typescript
  • Rollup Plugin Version: ^9.0.2
  • Rollup Version: 2.78.1 (vite ^3.1.4)
  • Operating System (or Browser): macOS 12.6
  • Node Version: 16
  • Link to reproduction (⚠️ read below): https://github.com/wight554/rollup-typescript-repro

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",
  1. Add "type": "module" to package.json
  2. Import and use typescript plugin
  3. 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

wight554 avatar Oct 22 '22 17:10 wight554

#1375

unional avatar Dec 16 '22 18:12 unional

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

Polve avatar Mar 11 '23 17:03 Polve

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

wight554 avatar Mar 12 '23 12:03 wight554

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?

Polve avatar Mar 12 '23 18:03 Polve

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;

rijkvanzanten avatar Apr 03 '23 19:04 rijkvanzanten

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

DetachHead avatar Apr 14 '23 00:04 DetachHead

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.

cowwoc avatar Jul 06 '23 02:07 cowwoc

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.

lazarljubenovic avatar Jul 21 '23 15:07 lazarljubenovic

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

shellscape avatar Jul 21 '23 16:07 shellscape

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

benmccann avatar Nov 09 '23 16:11 benmccann