先前處理過幾次 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 移除,結案!