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。
我所做的是,
- 前往 Angular 9 的重大變更
- 搜尋了
typescript版本,發現它只支援 3.7 - 將我的
typescript版本在package.json中編輯為"typescript": "~3.7.0" - 運行
npm i
這裡的 ~ 很重要,因為它會確保只更新到下一個修補版本(<3.8.0),而不是更新到次要版本,如果你使用 ^,它也會更新到次要版本(例如,4.0.0)。
