错误 TS1316 全局模块导出可能只出现在顶层

error TS1316 Global module exports may only appear at top level

构建旧的打字稿项目时遇到问题。无法构建我要返回的旧项目。尝试构建时 q 存在问题。我假设这是我的 tsc 版本,但我尝试过的每个版本都会导致错误。

网上有一些建议将打字稿版本更改为 2.2 以上,因为它处理打字的方式不同,但没有任何进展。

我提供了错误信息和版本。还有我的tsconfig.json。如果您需要更多信息,请告诉我。

错误 ($tsc -v 2.1.5)

$ tsc -p ./
typings/modules/q/index.d.ts(10,1): error TS1316: Global module exports may only appear at top level.

版本

nvm: 1.1.5
npm: 4.1.2
tsc: 2.1.5
node: 7.5.0

$ npm list --depth=0
+-- @types/q@1.5.1
`-- typescript@2.1.5

tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "module": "amd",
        "outDir": "static/js",
        "sourceMap": true,
        "strictNullChecks": true,
        "noImplicitAny": true
    },
    "files": [
        "typings/index.d.ts",
        "../common/types.d.ts"
    ],
    "include": [
        "src/**/*.ts"
    ]
}

编辑

tsc v2.3.0下列出的错误其实还是2.1.5。我没有全局安装 typepscript,所以当我 运行 tsc 命令时它仍然使用 2.1.5 而不是 2.3.0。

当声明文件中出现错误时,通常表示声明文件使用的语法在您的 TypeScript 版本中不可用。

在这种情况下,让我们看一下报告为错误的行。

64: then<U = T, V = never>(onFulfill?: ...
200: thenReject<U = T>(reason?: any): Promise<U>;

此处报告的错误指向类型参数部分中的等号。这表示不支持默认类型参数。这实际上没有意义,因为在 TS2.3 中添加了对 default type arguments 的支持。我最好的猜测是您实际上没有为这些错误安装 2.3,并且版本已切换...

考虑到这一点,其他错误可能是由于旧的(<2.1,如果我没记错的话)typings 文件和新的 @types 文件之间的不兼容。使用 node_modules/@types/q 中安装的类型,您不需要包含自定义 typings 文件夹,因此您应该能够删除 typings/modules/q(事实上,整个 typings文件夹)来解决另一个错误。

如果这不能解决您的问题,克隆一个项目会让您更容易找出问题所在。