2016-09-03 3 views
1

Я только что обновил свое приложение, чтобы использовать Angular 2 rc.6 и Angular Material 2 alpha 8-1. Эти пакеты полагаются на typescript 2, а последний использует новый модификатор readonly.компилятор gulp-typescript выдает ошибки в модификаторе readonly

Я использую gulp-typescript для компиляции моих .ts-файлов, и теперь у меня появилось много ошибок из файлов, в которых используется модификатор readonly. Например, эта строка:

readonly change: Observable<MdButtonToggleChange>; 

Выдает эти ошибки во время компиляции:

ошибки TS1005: '=' ожидается.

ошибка TS1005: ';' ожидается.

ошибка TS1005:.. '(' Ожидается

Я думаю, что это, вероятно, потому, что gulp-typescript внутренне использует typescript 1.8.10, который не имеет модификатор readonly

Никто из моего собственного кода использует readonly; только файлы, бросающие ошибки, являются файлами определения файлов сторонних разработчиков (.d.ts) от Angular 2 Material пакетов. Все файлы находятся в моей папке nodes_module/, и я попытался проигнорировать их, указав следующее в tsconfig.json:

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

Ошибки все еще появляются.

  • Могу ли я решить эту проблему?
  • Если нет, есть ли простой способ заставить компилятор игнорировать файлы .d.ts?

ответ

1

Одно решение было бы добавить Машинопись 2.0.2 RC зависимость для вашего проекта (npm install [email protected] --save-dev) и передать его gulp-typescript используя неофициальный typescript вариант:

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

Спасибо за нотой. Как я писал в OP, ошибки выбрасываются только файлами '.d.ts', принадлежащими' ng-Material'. Сама библиотека «Угловая» не вызывает ошибок. Все ошибки исходят от 'node_modules/@ angular2-material /' – BeetleJuice

+0

Мне следовало бы обратить более пристальное внимание на вопрос; это было то, о чем я ожидал иметь дело при переключении на RC6. Похоже, что команда Angular сделала больше, чем просто перейти к источнику 'esm', так как упомянутый источник больше не включает в себя свойства' readonly'. Что-то вроде облегчения, я думаю. – cartant

+0

Я пришел, чтобы опубликовать свое решение после исправления проблемы, и я только заметил, что вы изменили свой ответ на правильный. Спасибо. – BeetleJuice

3

@cartant получил правильный ответ вчера, но я только видел это минуту назад. В основном, решение состоит в том, чтобы получить gulp-typescript, чтобы использовать typescript 2 вместо встроенного typescript 1.8. Вот как:

1. Я добавил typescript 2.0.2 как devDependency в package.json

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

2. Я побежал npm install [email protected]

3. я редактировал, как я создал мой проект gulp-typescript в gulpfile.JS

От:

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

To:

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. Теперь ошибки времени компиляции ушли :-)

Смежные вопросы