NextJS服务器文件中的Typescript错误

时间:2019-05-31 15:54:49

标签: javascript typescript next.js

我正在使用以下软件包版本:

  • next v8.1.1-canary.42
  • @ types / next v8.0.5

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"]
}

我收到以下Typescript错误:

Cannot invoke an expression whose type lacks a call signature. Type 'typeof import(".../node_modules/next/types/index")' has no compatible call signatures.

我不明白这里发生了什么。谁能解释这个错误,为什么这个流行的软件包的核心功能之一会抛出该错误?我是否需要为某些缺少的内容手动扩展某些Next类型?

1 个答案:

答案 0 :(得分:1)

由于您的代码实际上可以与next v8.1.0(最新发布的版本)和@types/next v8.0.0一起使用,但是可以与next v8.1.1-canary.42一起使用,因此可能只是意味着他们引入了一些不兼容的更改,使现有.d.ts文件过时了。 @types/*软件包是由独立的志愿者维护的,这些软件包无需费心发布TypeScript类型定义,并且经常更新得晚,尤其是在我们谈论某些预发布的版本时。

您可以考虑使用最新版本的next(v8.1.0)吗?

或者,您可以尝试了解不同版本之间的变化,并生成自己的.d.ts文件以供使用。