網站搜尋

Angular 編譯器需要 TypeScript >=3.4.0 且 <3.5.0,但發現的是 3.5.3


當我執行 npm run build 時,我收到以下錯誤:

Angular 編譯器需要 TypeScript 版本 >=3.4.0 且 <3.5.0,但發現的版本為 3.5.3。

我已經嘗試過分別做以下的事情:

npm install typescript@">=3.4.0 <3.5.0"。然後刪除 node_modules 和 package.json。執行 npm install

npm update --force。然後刪除 node_modules 和 package.json。執行 npm install

我仍然收到錯誤:

我的 package.json 包含以下依賴項:

  "dependencies": {
    "@angular/animations": "8.1.0",
    "@angular/cdk": "^8.0.2",
    "@angular/cli": "^8.1.0",
    "@angular/common": "8.1.0",
    "@angular/compiler": "8.1.0",
    "@angular/core": "8.1.0",
    "@angular/forms": "8.1.0",
    "@angular/http": "7.2.15",
    "@angular/material": "^8.0.2",
    "@angular/platform-browser": "8.1.0",
    "@angular/platform-browser-dynamic": "8.1.0",
    "@angular/router": "8.1.0",
    "@ngx-translate/core": "^11.0.1",
    "@ngx-translate/http-loader": "^4.0.0",
    "angular-user-idle": "^2.1.2",
    "angular2-cookie": "^1.2.6",
    "core-js": "^2.6.7",
    "rxjs": "6.5.2",
    "rxjs-tslint": "^0.1.5",
    "stream": "0.0.2",
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^0.801.0",
    "@angular/compiler-cli": "8.1.0",
    "@angular/language-service": "8.1.0",
    "@types/jasmine": "~3.3.13",
    "@types/jasminewd2": "~2.0.6",
    "@types/node": "~12.6.1",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "protractor": "~5.4.2",
    "ts-node": "~8.3.0",
    "tslint": "~5.18.0",
    "typescript": "^3.4.5"
  }

ng --version 輸出如下:

Angular CLI: 8.1.2
Node: 10.16.0
OS: win32 x64
Angular: 8.1.0
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.801.2
@angular-devkit/build-angular     0.801.2
@angular-devkit/build-optimizer   0.801.2
@angular-devkit/build-webpack     0.801.2
@angular-devkit/core              8.1.2
@angular-devkit/schematics        8.1.2
@angular/cdk                      8.1.1
@angular/cli                      8.1.2
@angular/http                     7.2.15
@angular/material                 8.1.1
@ngtools/webpack                  8.1.2
@schematics/angular               8.1.2
@schematics/update                0.801.2
rxjs                              6.5.2
typescript                        3.5.3
webpack                           4.35.2

這裡可能出了什麼問題?

答案#1

適用於 Angular 12

對於使用最新版本 Angular 12 的專案,您應該使用 TypeScript v4.2.x 到 4.3.x

npm i -D [email 

適用於 Angular 11

對於正在運行最新版本 Angular 11(11.2.x)的項目,它支持最高至 TypeScript v4.1.5。

npm i -D [email 

適用於 Angular 10(截至 2020 年 6 月)

對於使用 Angular 10 的人,請注意必須安裝 TypeScript 3.9,因為維護者已經移除了對 TypeScript 3.8 的支持。最安全的做法是安裝最新版本的 TypeScript

npm i -D [email 

適用於 Angular 9(截至 2020 年 5 月)

對於運行在最新版本的 Angular 9(v9.1.x)的專案,它支援最高到 TypeScript v3.8.3。如果您使用的是比這更新的版本(例如 TypeScript v3.9.0),您應該將其降級並安裝支援的版本:

npm i -D [email 

對於正在使用舊版本 Angular 9(v9.0.x)的專案,支援的 TypeScript 版本為 TypeScript v3.6.5 到 v3.7.5(含)。安裝其他不支援的版本(例如 3.8.3)會導致類似以下的錯誤:

ERROR in The Angular Compiler requires TypeScript >=3.6.4 and <3.8.0 but 3.8.3 was found instead

要修復它,你應該安裝錯誤訊息中所列的支援版本。我建議你安裝 Typescript 3.7.x,因為這將啟用如選擇性鏈結和空值合併等實用功能。

npm i -D [email 

或者,你可以簡單地將 Angular 更新到最新的小版本 (v9.1.x),因為這應該不包含任何破壞性變更。


適用於 Angular 8(原始答案)

看起來你已經安裝了最新版本 (v3.5.3) 的 TypeScript。你應該安裝 TypeScript v3.4.5,這是 Angular 8 支援的版本。

你可以嘗試這個指令來安裝特定版本的 TypeScript,而不是最新版本。

npm i -D [email 

此外,你可能想要考慮在你的 package.json 中更改 TypeScript 版本的插入符號 ^:

  • 完全移除它意味著這將阻止 npm 安裝/使用最新的小版本(3.5.3)。

    "typescript": "3.4.5"

  • 將它改為「~」會告訴 npm 任何補丁版本都是可以接受的

    "typescript": "~3.4.5"/將使用符合 3.4.X 的最新版本

有關 npm 套件版本控制使用的更多資訊請參考:https://docs.npmjs.com/about-semantic-versioning


適用於使用較舊 Angular 版本(如 Angular 2 到 7)的人

|-----------------|--------------------|
| Angular version | TypeScript version |
|-----------------|--------------------|
|       6.1.x     |       3.6.x        |
|-----------------|--------------------|
|       7.2.x     |       2.9.x        |
|-----------------|--------------------|                                 

同樣地,如果我們使用任何其他版本的 Angular,你也可以安裝相應的 TypeScript 版本。

npm i -D [email 

來源 - 請參考每個 Angular 版本所支持的 TypeScript 版本完整列表。


其他有用資訊

實際上,確實有一種方法可以安裝那些由您專案中安裝的 Angular 版本「不支援」的 TypeScript 版本,如 felipesilva 所指出的。這樣做的一個好處是可以讓您在專案中安裝最新的 TypeScript 版本(例如 TypeScript 4.1.2 或任何測試版釋出版本)。

在你的 tsconfig.json 中,你可以簡單地將 disableTypeScriptVersionCheck 設置為 true。

{
  // ...
  "angularCompilerOptions": {
    // ...
    "disableTypeScriptVersionCheck": true
  }
}

然而,請注意,官方 Angular 文件並不建議這麼做:

不建議使用,因為不支援的 TypeScript 版本可能會有未定義的行為。

答案#2

你有兩個選擇:

1-自動地:

這將安裝正確的版本(根據錯誤更改版本號)

npm install typescript@">=3.4.0 and <3.5.0" --save-dev

2-手動:

前往 package.json 並更改你的 typescript 版本,如果你想升級你的 Angular 專案到

Angular 17 (npm install typescript@"~5.2.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~5.2.0"
}

Angular 16 (npm install typescript@"~4.9.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~4.9.0"
}

Angular 15 (npm install typescript@"~4.8.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~4.8.0"
}

Angular 14 (npm install typescript@"~4.7.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~4.7.0"
}

Angular 13 (npm install typescript@"~4.4.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~4.4.0"
}

Angular 12 (npm install typescript@"~4.2.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~4.2.0"
}

Angular 11 (npm install typescript@"~4.0.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~4.0.0"
}

Angular 10 (npm install typescript@"~3.8.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~3.8.0"
}

Angular 9 (npm install typescript@"~3.7.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~3.7.0"
}

Angular 8 (npm install typescript@"~3.4.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~3.4.0"
}

Angular 7 (npm install typescript@"~3.1.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~3.1.0"
}

Angular 6 (npm install typescript@"~2.9.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~2.9.0"
}

Angular 4 (npm install typescript@"~2.2.0" --save-dev)

"devDependencies": {
  ...
  "typescript": "~2.2.0"
}

然後執行:

npm install 

答案#3

運行此腳本以查找確切版本

npm install typescript@">=3.4.0 and <3.5.0" --save-dev

答案#4

請使用以下命令卸載 TypeScript:

npm uninstall typescript

然後安裝特定版本的 TypeScript:

npm i --save-dev [email 

答案#5

我在我的 Angular 9 中也遇到這個問題,但版本號不同。

錯誤:Angular 編譯器需要 TypeScript 版本 >=3.6.4 且 <3.8.0,但發現的版本是 3.8.2。

我所做的是,

  1. 前往 Angular 9 的重大變更
  2. 搜尋了 typescript 版本,發現它只支援 3.7
  3. 將我的 typescript 版本在 package.json 中編輯為 "typescript": "~3.7.0"
  4. 運行 npm i

這裡的 ~ 很重要,因為它會確保只更新到下一個修補版本(<3.8.0),而不是更新到次要版本,如果你使用 ^,它也會更新到次要版本(例如,4.0.0)。