【问题标题】:TS2451: Cannot redeclare block-scoped variable 'custom'TS2451:无法重新声明块范围变量“自定义”
【发布时间】:2019-09-11 09:41:06
【问题描述】:

我在一个网络项目中使用打字稿。我使用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 的错误吗?

【问题讨论】:

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


    【解决方案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"
      ]
    }
    

    【讨论】:

    • 另外,请务必查找并尝试删除其中任何一个:/// <reference path="../node_modules/@types/node/index.d.ts" />
    【解决方案2】:

    我的问题是我不小心包含 node_modules/@types。通过像这样注释掉它来修复:

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

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,但错误消息只是因为缓存错误而具有误导性。我尝试了很多东西,但最终通过删除npm_modules,清除缓存,重新安装解决了:

      npm cache clean --force 
      npm install
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-30
          • 1970-01-01
          • 1970-01-01
          • 2018-08-29
          • 2018-08-02
          • 2020-06-07
          • 2016-06-15
          • 2019-01-12
          相关资源
          最近更新 更多