Reputation: 14398
I'm using the following package versions:
server.js
import next from 'next';
const app = next({ dev: isDevelopment });
tsconfig.json
{
"compilerOptions": {
"allowJs": true,
"allowSyntheticDefaultImports": true,
"alwaysStrict": true,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"jsx": "preserve",
"lib": ["dom", "es2017"],
"module": "commonjs",
"moduleResolution": "node",
"noEmit": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"removeComments": true,
"resolveJsonModule": true,
"sourceMap": true,
"strict": true,
"target": "esnext"
},
"exclude": ["node_modules"]
}
I get the following Typescript error:
Cannot invoke an expression whose type lacks a call signature. Type 'typeof import(".../node_modules/next/types/index")' has no compatible call signatures.
I can't understand what's going on here. Can anyone help explain this error and why one of the core functions for this popular package throws it? Do I need to manually extend some Next types for something that's missing?
Upvotes: 0
Views: 653
Reputation: 3608
Since your code actually works with next
v8.1.0 (the latest released version) and @types/next
v8.0.0, but breaks with next
v8.1.1-canary.42, it might just mean that they introduced some incompatible changes that made the existing .d.ts
files out of date. The @types/*
packages are maintained by independent volunteers for those packages that don't bother publishing the TypeScript type definitions, and are often late to update, especially if we are talking about some pre-released version.
Can you consider using the latest version of next
(v8.1.0)?
As an alternative, you might try to understand what changed between versions, and produce your own .d.ts
files to use.
Upvotes: 2