Актуальные типы (например, lib.dom.d.ts) для более старого компилятора TypeScript

Angular 6 устанавливает максимальную версию TypeScript 2.9.2.

Однако из-за устаревшего lib.dom.d.ts в этой версии TS я хотел бы использовать lib.dom.d.ts из TypeScript 3.0.3, который решает проблемы, с которыми я сейчас сталкиваюсь.

Можно ли использовать lib.dom.d.ts из TS 3.0.3 в проекте TS 2.9.2 без проблем с node_modules (вручную заменяя файлы там)?

Или, как вариант, есть @types пакеты, содержащие новейшие lib.dom.d.ts, разработанные специально для использования с более ранними, чем последняя версия компилятора TS?


person Alexander Abakumov    schedule 19.09.2018    source источник
comment
Как насчет того, чтобы перейти к этому конкретному файлу определений и заменить его более новой версией, не перекачивая всю версию TypeScript?   -  person Microsmsm    schedule 20.09.2018
comment
почему бы не использовать машинопись 3.0.3?   -  person rhavelka    schedule 20.09.2018
comment
@rhavelka: Потому что вы получаете: ERROR in The Angular Compiler requires TypeScript >=2.7.2 and <2.10.0 but 3.0.3 was found instead.   -  person Alexander Abakumov    schedule 20.09.2018
comment
@Microsmsm: Вы хотите сделать это в node_modules? Да, это последнее средство, я просто ищу любые другие удобные в обслуживании варианты, которые могут быть у TS.   -  person Alexander Abakumov    schedule 20.09.2018
comment
вы пробовали "lib": ["es2017", "dom"] в tsconfig.json?   -  person Microsmsm    schedule 20.09.2018
comment
@Microsmsm: Конечно. Проблема в том, что типы, связанные с IndexedDb, были добавлены только начиная с TS 3. Например, строка const storage: StorageManager = navigator.storage; не будет компилироваться с TS 2.9, но отлично скомпилируется с TS 3.0.   -  person Alexander Abakumov    schedule 20.09.2018


Ответы (1)


Вы можете установить параметр компилятора lib в tsconfig.json на список файлов библиотеки, которые вы хотите из TypeScript 2.9 (возможно, пустой список), а затем скопировать нужные lib.*.d.ts файлы из TypeScript 3.0 в свой проект, обязательно удалив директивы <reference>, чтобы они не загружайте случайно файлы библиотеки TypeScript 2.9. Надеюсь, вы сможете найти комбинацию, которая будет работать для вас, пока не будет выпущен Angular 7 с поддержкой TypeScript 3.0. Если вы столкнетесь с определенными проблемами, которые не можете решить, обновите вопрос.

person Matt McCutchen    schedule 22.09.2018