TS2451:无法重新声明块作用域变量“ custom”

时间:2019-04-22 06:49:59

标签: node.js typescript visual-studio-code

我在一个网络项目中使用打字稿。我使用awesome-typescript-loader作为webpack的加载器。构建项目时出现错误:

ERROR in [at-loader] ./node_modules/@types/node/index.d.ts:82:15 
    TS2451: Cannot redeclare block-scoped variable 'custom'.
ERROR in [at-loader] ./node_modules/@types/node/index.d.ts:85:15 
    TS2451: Cannot redeclare block-scoped variable 'custom'.
ERROR in [at-loader] ./node_modules/@types/node/ts3.2/util.d.ts:7:15 
    TS2451: Cannot redeclare block-scoped variable 'custom'.
ERROR in [at-loader] ./node_modules/@types/node/ts3.2/util.d.ts:10:15 
    TS2451: Cannot redeclare block-scoped variable 'custom'.

我启动了一个仅安装了typescript@types/typescript的全新文件夹,我仍然可以看到visual studio code抱怨的相同错误。

以下版本:

  "dependencies": {
    "@types/node": "^11.13.6",
    "typescript": "^3.4.4"
  }

如上面显示的错误所示,我发现了

index.d.ts中:

declare module "util" {
    namespace inspect {
        const custom: symbol;
    }
    namespace promisify {
        const custom: symbol;
    }
    namespace types {
        function isBigInt64Array(value: any): boolean;
        function isBigUint64Array(value: any): boolean;
    }
}

util.d.ts中:

declare module "util" {
    namespace inspect {
        const custom: unique symbol;
    }
    namespace promisify {
        const custom: unique symbol;
    }
    namespace types {
        function isBigInt64Array(value: any): value is BigInt64Array;
        function isBigUint64Array(value: any): value is BigUint64Array;
    }
}

我们可以看到custom确实在index.d.tsutil.d.ts中重新声明了。

所以我的问题是如何解决此问题?这是@ types / node的错误吗?

4 个答案:

答案 0 :(得分:1)

我面临着同样的问题。在tsconfig中删除对节点的引用对我来说解决了这个问题。

tsconfig示例。

  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "dist",
    "sourceMap": true
  },
  "files": [
//    "./node_modules/@types/node/index.d.ts",
    "./node_modules/@types/express/index.d.ts"
  ],
  "include": [
    "src/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ],
  "lib": [
    "es2017"
  ]
}```

答案 1 :(得分:0)

我的问题是我意外地包含了 node_modules / @ types 。通过注释将其固定,如下所示:

"include": ["src/**/*.ts","__tests__/**/*.ts"/*, "node_modules/@types"*/]

答案 2 :(得分:0)

我遇到了同样的问题,但是错误消息只是由于缓存错误而引起误导。我尝试了很多事情,但最终通过删除npm_modules,清除缓存和重新安装来解决了这个问题:

npm cache clean --force 
npm install

答案 3 :(得分:0)

我在 protractor.conf.js 文件中两次添加了这段代码

require('ts-node').register({
    project: require('path').join(__dirname, './tsconfig.e2e.json')
 });