先前處理過幾次 VS2017 TypeScript 版本相容問題,特徵都是專案可編譯但 Error List 有錯誤。在某專案遇到類似狀況,錯誤訊息為 Cannot reclare block-scoped varialbe 'JSON'. @ lib.es6.d.ts。心中警鈴大作,心想應該又是煩人的 TypeScript 版本相容問題。

將 TypeScript 版本從 2.5 更新到 2.7,VS2017 也更新到最新版,問題卻不見改善,這才覺得問題不單純。

經過調查,問題根源讓人啞然失笑,原來專案裡有時代的眼淚 - JSON2.js,Visual Studio 會將專案內含的 JavaScript 也納入 TypeScript 參照範圍,JSON2.js 裡宣告的 JSON 全域變數與瀏覽器內建物件定義檔(lib.es6.d.ts)衝突。

專案網站的主要瀏覽器是 IE,IE8 起已內建 JSON,原本擔心啟用 IE7 相容模式時未內建 JSON 物件才加掛 JSON2.js,經實測 IE11 即使開啟 IE7 相容也有 JSON 可用,而實務環境殘存的 IE678 餘孽必須死,故放心將 JSON2.js 移除,結案!

VS2017 showed a weird "Cannot reclare block-scoped variable 'JSON' @ lib.es6.d.ts" error. After some investigation, I found it's caused by a old JSON2.js in the project.


Comments

Be the first to post a comment

Post a comment