2016-01-23 69 views
1

打字稿編譯器似乎產生錯誤的輸出,如下面所示:打字稿編譯器生成錯誤輸出

export default class TitleParser {} 

產地:

class TitleParser { 
} 
exports.TitleParser = TitleParser; 

所以這裏的問題是,我在嘗試使用時出現錯誤該類通過導入它。錯誤:titleparser_1.default is not a function顯示嘗試導入庫後進行實例化時:

import TitleParser from './TitleParser'; 
const parser = new TitleParser(); // the error occurs here 

這種情況的解決方法是對類出口下方,就像這樣:

class TitleParser {} 
export default TitleParser; 

以上會產生正確的JavaScript代碼,即

class TitleParser {} 
exports.default = TitleParser; 

此後類的使用不會再引發錯誤。

我的編譯器配置如下:

"module": "commonjs", 
    "target": "es6", 
    "noImplicitAny": true, 
    "outDir": "../api", 
    "rootDir": "src", 
    "sourceMap": true, 
    "experimentalDecorators": true 

而編譯器版本:1.7.5

這是在編譯器中的錯誤還是我做錯了什麼?編譯器從不抱怨。

+1

如果你設定目標ES5。沒事的。所以考慮到這個語言的創建者在這裏說:https://github.com/Microsoft/TypeScript/issues/2242#issuecomment-83694181。我認爲這是編譯器中的一個錯誤。 – Amid

回答

1

在使用commonjs時,您不應該能夠使用ES6(編譯器通常會提醒您這一點...請參閱下一段爲什麼它不會)。

如果你複製你的配置直出你的文件,你還必須在一行的末尾缺少逗號:

"sourceMap": true 

如果你的目標ES5和固定配置(Visual Studio代碼是指着大出的問題),輸出將是:

var TitleParser = (function() { 
    function TitleParser() { 
    } 
    return TitleParser; 
})(); 
exports.default = TitleParser; 
//# sourceMappingURL=titleparser.js.map 

,您可以使用完全按照自己的打算:

import TitleParser from './titleparser' 

var x = new TitleParser(); 

與v1.7.5所有測試

ES6

如果你想使用ES6,調整你的代碼是這樣的:

export class TitleParser { 

} 

和:

import {TitleParser} from './titleparser' 

var x = new TitleParser(); 
+0

複製tsconfig文件時出現錯字。我通過編輯問題手動添加了experimentalDecorators選項,並忘記了逗號。問題是我需要定位es6,因爲我使用異步/等待功能,而且不能通過定位es5來工作。另外,我使用VSCode,它從不抱怨針對es6並使用'commonjs'。 – eAbi

+0

如果您想要使用ES6(我們使用ES6樣式導入進行簡單導出(即不是默認導入),我添加了推薦的更改。 – Fenton