網站搜尋

node.js - TS2403: 後續的變數宣告必須具有相同的類型。在 NPM 安裝之後


我已經在 Stack Overflow 上搜尋過這個問題,但仍然不清楚為什麼會發生這種情況/如何解決。

我想在我的 Typescript 專案中使用 Node 類型定義,所以我輸入了這個指令:

npm install @types/node --save

其結果是:

c:/xyz/node_modules/@types/node/index.d.ts(89,13)
error TS2403: Subsequent variable declarations must have the same type.
Variable 'require' must be of type 'Require', but here has type 'NodeRequire'.

我的機器上的 Node 版本是 7.0.3,安裝的類型是針對版本 + @types/[email

如果我移除並卸載 typings,我的專案就可以順利編譯。

根據錯誤訊息,看起來 typings 內容不正確!修正它很麻煩。有什麼建議嗎?

這是 index.d.ts 中失敗的程式碼行

看起來需要繞過 NodeRequire(介面)以使用 Require.js?

這是 TSConfig 檔案:

{
    "compilerOptions": {
        "module": "amd",
        "moduleResolution": "node",
        "target": "es5",
        "noImplicitAny": false,
        "jsx": "react",
        "sourceMap": false,
        "baseUrl": ".",
        "paths": {
            "OfficeFabric/*": [
                "node_modules/office-ui-fabric-react/lib-amd/*"
            ]
        }
    } 
}

我嘗試了下面的排除建議,但沒有用。Github 說,如果模組解析是 NODE,那麼排除無論如何都不起作用。

答案#1

好,終於找到了根本原因:Node 的 index.d.ts 文件與 Require 的 index.d.ts 文件發生了衝突,兩者都宣告了一個名為 require 的變數。我找到問題的方法是將 require 重新命名為 nrequire,然後在專案中搜尋所有 nrequire 的實例。有許多解決方案,

  1. 重新命名變數(在 npm 安裝或更新時會被清除)。

  2. 在 TypeScript 中使用 --types 選項來使用其中一個而不是兩者同時使用。

  3. 只需移除節點類型。

答案#2

我在工作項目中多次遇到這個問題,我是透過卸載現有的 node_modules 並安裝現有 node_modules 的較新版本來解決的。