2016-09-03 57 views
1

我剛剛升級了我的應用程序以使用Angular 2 rc.6Angular Material 2 alpha 8-1。這些軟件包依賴於typescript 2,後者使用新的readonly修改器。gulp-typescript編譯器在readonly修飾符上拋出錯誤

我使用gulp-typescript來編譯我的.ts文件,現在我從使用readonly修飾符的文件中收到很多錯誤。例如,該行:

錯誤TS1005:

readonly change: Observable<MdButtonToggleChange>; 

編譯過程中拋出這些錯誤 '=' 的預期。

錯誤TS1005:';'預期。

錯誤TS1005:「(」預期

我想這大概是因爲gulp-typescript內部使用typescript 1.8.10,它不具有readonly修改

的我自己的代碼沒有使用readonly;的只有引發錯誤的文件是來自Angular 2 Material包的第三方打字稿定義文件(.d.ts)。所涉及的文件全部位於我的nodes_module/文件夾中,並且我試圖通過在tsconfig.json中有以下內容來忽略它們:

"exclude": [ 
    "node_modules", 
    "typings" 
] 

雖然錯誤仍然顯示。

  • 我可以解決這個問題嗎?
  • 如果沒有,是否有簡單的方法讓編譯器忽略.d.ts文件?

回答

1

一個解決方案是爲打字稿2.0.2 RC依賴添加到您的項目(npm install [email protected] --save-dev),並使用非官方typescript選項將它傳遞給gulp-typescript

[...].pipe(ts({ 
    typescript: require('typescript') 
})); 
+0

謝謝你的筆記。正如我在OP中寫的,錯誤僅由屬於'ng-Material'的'.d.ts'文件拋出。 Angular庫本身不會引發錯誤。所有錯誤來自'node_modules/@ angular2-material /' – BeetleJuice

+0

我應該更加關注這個問題;這是我期望在切換到RC6時不得不面對的問題。似乎Angular團隊已經做了更多工作,只是轉向了'esm'源代碼,因爲該源代碼似乎不再包含「只讀」屬性。我想,有一種解脫。 – cartant

+0

在解決問題之後,我來發布我的解決方案,並且我注意到,您將答案更改爲正確答案。謝謝。 – BeetleJuice

3

@cartant答對昨天,但我只在一分鐘前看到它。基本上,解決辦法是讓gulp-typescript使用typescript 2而不是內置的typescript 1.8。這裏是如何:

我加typescript 2.0.2作爲devDependency在的package.json

"devDependencies": {  
    "gulp-typescript": "^2.13.6", 
    "typescript": "^2.0.2", 
} 

2.我跑npm install [email protected]

我如何編輯我在gulpfile中創建了我的gulp-typescript項目。JS

來源:

var ts = require('gulp-typescript'); 
var tsProject = ts.createProject('tsconfig.json'); 

要:

var ts = require('gulp-typescript'); 
var tsProject = ts.createProject('tsconfig.json', { 
    //Use TS version installed by NPM instead of gulp-typescript's built-in 
    typescript: require('typescript') 
}); 

More info.現在,編譯時錯誤:-)不見了