mitt
mitt copied to clipboard
error TS2349: This expression is not callable when using "module": "NodeNext".
Using mitt in Typescript with "moduleResolution": "NodeNext" gives "error TS2349: This expression is not callable." error.
"mitt": "^3.0.1"
"typescript": "^5.3.3"
tsconfig.json
{
"compilerOptions": {
"outDir": "dist",
"target": "ES2018",
"lib": ["ESNext", "DOM", "DOM.Iterable"],
/* Bundler mode */
"moduleResolution": "NodeNext",
"module": "NodeNext",
"resolveJsonModule": true,
"esModuleInterop": true,
"sourceMap": true,
"allowJs": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src"]
}
import mitt from 'mitt';
...
private readonly emitter = mitt<Events>();
tsc --pretty --noEmit output:
error TS2349: This expression is not callable.
Type 'typeof import("C:/code/project/node_modules/mitt/index")' has no call signatures.
28 private readonly emitter = mitt<Events>();
~workaround seems to be mitt.default<Events>(), works for me.~
worked type-wise. But not when I ran the code.
I desperately need this to be fixed
@Dhaxor @developit
found a tool which can check if package types are typescript valid - https://arethetypeswrong.github.io/?p=mitt%403.0.1, they're not for mitt
the similar problem is discussed here: https://github.com/microsoft/TypeScript/issues/52086, i tried a workaround from that thread, and it works both type-wise and the code also executes correctly
import _mitt from 'mitt';
const mitt = _mitt as unknown as typeof _mitt.default;
by quickly looking at that typescript issue the proper fix might require generating different .d.ts typings for cjs and esm outputs (smth like here). the current "typings": "index.d.ts", file which mitt generates is not a valid esm output, but i didn't investigate that properly
upd.: or cjs output should be fixed as explained here https://github.com/arethetypeswrong/arethetypeswrong.github.io/blob/main/docs/problems/FalseExportDefault.md#explanation
The problem here is with providing both ESM and CJS. This appears to be problematic when dealing with declaration files; see: https://github.com/microsoft/TypeScript/issues/54593
I am currently looking into this