компилятор gulp-typescript выдает ошибки модификатора только для чтения

Я только что обновил свое приложение, чтобы использовать Angular 2 rc.6 и Angular Material 2 alpha 8-1. Эти пакеты основаны на typescript 2, а последний использует новый модификатор 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?

person BeetleJuice    schedule 03.09.2016    source источник


Ответы (2)


Одним из решений было бы добавить зависимость TypeScript 2.0.2 RC к вашему проекту (npm install typescript@rc --save-dev) и передать ее gulp-typescript с помощью неофициального typescript вариант:

[...].pipe(ts({
    typescript: require('typescript')
}));
person cartant    schedule 03.09.2016
comment
Спасибо за замечание. Как я писал в ОП, ошибки выдают только .d.ts файлы, принадлежащие ng-Material. Сама библиотека Angular ошибок не выдает. Все ошибки исходят от node_modules/@angular2-material/ - person BeetleJuice; 03.09.2016
comment
Я должен был обратить более пристальное внимание на вопрос; это было то, с чем я ожидал столкнуться при переходе на RC6. Похоже, что команда Angular сделала больше, чем просто перешла к источнику esm, так как указанный источник больше не включает свойства readonly. Какое-то облегчение, наверное. - person cartant; 03.09.2016
comment
Я пришел опубликовать свое решение после устранения проблемы и только что заметил, что вы изменили свой ответ на правильный. Спасибо. - person BeetleJuice; 05.09.2016
comment
Да, я вырезал лишнее из Angular 2 и немного подчистил. Я должен был оставить комментарий, чтобы вы знали. Надеюсь, вы не потратили слишком много времени на поиск решения. - person cartant; 05.09.2016

@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')
});

Подробнее. Теперь ошибки времени компиляции исчезли :-)

person BeetleJuice    schedule 05.09.2016