簡體   English   中英

Visual Studio 2017:js 文件導致許多打字稿錯誤

[英]Visual Studio 2017: js file causes many typescript errors

請參閱下面的編輯

我使用以下包作為我的 VS 項目的基礎 -> https://github.com/AngularClass/angular2-webpack-starter

一切在 Visual Studio 代碼中運行良好,然后我嘗試將其轉換為 Visual Studio 2017 項目(node.js web)

現在出現了一些問題

VS 似乎將 TypeScript 定義安裝到一個特殊的文件夾C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types

此外,我在 package.json 中包含了 @types/node ,這導致了相應的 node_modules 文件夾。

現在 VS 抱怨錯誤代碼 TS4090(“節點”的定義沖突)。

除了刪除 \AppData 中的文件夾來告訴 VS 它應該使用哪些 @types 之外,是否還有可能?

TypeScript 的整個集成對我來說並不是很清楚...... MSBuild 能識別現有的 tsconfig.json 嗎? 還是我必須在項目文件中配置它,如此處所示

編輯

我剛剛注意到我實際上正在編輯一個 .js 文件。 一旦我將擴展名更改為 .ts,每個警告和錯誤都會消失。 在將擴展名從 .js 更改為 .ts 之前,我也遇到了許多打字稿錯誤(如 TS2307,找不到模塊'@angular/core')

該文件剛剛進行了導入(從節點)

import * as fs from 'fs';

誰能解釋為什么我得到這個錯誤? 為什么一個 JS 文件會導致 200 多個打字稿錯誤(有些甚至與上面的導入無關)?

EDIT2 發生的錯誤是

  • TS2403 - 后續變量聲明必須具有相同的類型。
  • TS2300 - 重復標識符“PropertyKey”
  • TS4090 - 發現“節點”的定義沖突(釋義:在./node_modulesC:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types

所有錯誤都是由 C:\Users\ d.ts C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@typesC:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TypeScript\lib.es6.d.ts中的 d.ts 文件引起的C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TypeScript\lib.es6.d.ts

就像鮑登凱利指出的那樣,這似乎是造成這個問題的原因似乎是 MS 放在這里的定義文件C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types ,只要我安裝我自己的定義./node_modules中的文件 VS 在編輯 JS 文件時找到兩個定義(如果存在)。 所以解決方案要么是:

  • 以 MS 方式進行
  • 以某種方式排除 MS 目錄

這是https://github.com/Microsoft/TypeScript/issues/14565中相關的 BUG

我能夠通過啟用消除錯誤

在此處輸入圖像描述

對於 JavaScript,請嘗試取消選中/禁用Tools > Options > Text Editor > JavaScript/TypeScript > Language Service下的“新 JavaScript 語言服務”。 當我打開隨機的 JavaScript 文件並且錯誤窗口會變得瘋狂時,這似乎對我有所幫助。

關於 Angular 2 錯誤(找不到模塊 @angular/core),如果項目目錄中有 tsconfig.json,Visual Studio 和 TS 編譯器都會使用它。 如果您關閉並重新打開解決方案,則項目屬性的 TypeScript 選項卡上的所有內容都應該被禁用。

一旦您知道 tsconfig.json 正在工作,如果您使用的是 TS 2.x,編譯器應該在node_modules/@angular/core/index.d.ts下找到並使用 angular 2 附帶的類型,除非您在tsconfig 覆蓋了類似的types: []

我仍然無法 100% 弄清楚 Visual Studio 錯誤窗口中發生了什么,因為我仍然會收到零星的不合理錯誤(我知道這一點是因為我仍然可以編譯)。 我確實知道 Visual Studio TypeScript 語言服務是控制 Visual Studio IDE 中的錯誤和智能感知的東西,它與特定版本的 TypeScript(VS 2017 中的 2.1)相關聯。 這些錯誤總是在 VS 2015 和現在的 VS 2017 中引起問題。 我認為這歸結為極其無證的 TypeScript 虛擬項目的內部運作,我仍然沒有找到目的。

這些鏈接是有用的閱讀:

http://blog.angular-university.io/typescript-2-type-system-how-do-type-definitions-work-in-npm-when-to-use-types-and-why-what-are-編譯器選擇類型/

http://www.typescriptlang.org/docs/handbook/tsconfig-json.html#types-typeroots-and-types

https://github.com/Microsoft/TypeScript/issues/14540

安裝到C:\Users\MyUser\AppData\Local\Microsoft\TypeScript\node_modules\@types的定義文件僅用於提供 JavaScript IntelliSense。 如果您的項目中有 TypeScript 或配置了tsconfig.json的項目,您需要獲取自己的.d.ts文件並將它們存儲在您的項目中。 幸運的是,這個項目在package.json中包含了你需要的所有 .d.ts 文件,一個簡單的npm install就可以解決問題。

我可以告訴你,與“節點”沖突的定義很可能是由於 node.d.ts 文件有 2 個副本。 如果您自己手動安裝了一個,在項目package.json中包含的那個之上,那么您將收到這些錯誤。

我不確定您在 JavaScript 文件中遇到的 TS 錯誤。 你能告訴我一個錯誤的例子和導致它的代碼片段嗎?

此外,您可能不希望與 MSBuild 集成,因為該項目已經設置為使用 npm 腳本 + webpack 運行。 你應該看看這個插件: https ://marketplace.visualstudio.com/items?itemName=MadsKristensen.NPMTaskRunner

最后,我認為您不想進入 Node.js Web 項目。 對於這個項目,您最好只在 VS 中打開文件夾。 為此,只需使用File > Open > Folder...並導航到您的根文件夾。 這將為您提供所需的所有編輯工具,而無需任何 MSBuild 或 VS 項目結構。 考慮到該項目並非旨在利用這些功能中的任何一個,因此暫時忽略它們可能會更容易。

請讓我知道您遇到的其他問題。

僅供參考,這已在 Visual Studio 17.2 中修復🙂

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM