3

我有一個包含一個類定義一個打字稿文件:打字稿及未捕獲的語法錯誤:塊範圍的聲明(讓,常量,函數,類)還不支持外嚴格模式

if (window.console == null) { 
    (<any>window).console = { 
      error: function (a) { 
     }, 
      log: function (a) { 
     } 
    }; 
} 

class SendMessage { 
    //..... 
} 

編譯成JavaScript後(通過VS2015),我得到與類定義的線上的錯誤:

Uncaught SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode 

我發現我必須使用嚴格模式。但是爲什麼以及如何在打字稿中使用它?

感謝

回答

11

這是因爲它編譯成ES6和瀏覽器要求塊作用域聲明嚴格模式下使用。

您可以使用嚴格模式解決此問題。要做到這一點...

"use strict"; 

...到每個文件的頂部。

但是,我想你可能想要將編譯目標從ES6更改爲ES5。如果您使用的是tsconfig.json,請將"target": "es6"更改爲"target": "es5"。這樣做將...編譯爲ES5 ...所以塊範圍的聲明將被適當地更改,因此不需要"use strict";。此外,更多瀏覽器將支持您的代碼。目前運行時ES6支持仍然不普及。

請注意,如果你不使用tsconfig.json,您可能需要更改目標在項目屬性打字稿生成選項卡,如下所示:

ECMAScript version change

+1

感謝您的解釋男人! –

+0

我也遇到了同樣的錯誤。如果我使用target:es5,我將無法使用async/await。有沒有解決這個問題的方法。 – sanjeev

+0

@sanjeev加上「use strict」;到答案中顯示的文件頂部,或等待TypeScript 2.0使用async/await進行定位的ES5可用時。 –

相關問題