Как смешать файлы определений окружающего и не окружающего текста

У меня есть старый проект машинописного текста, который использует метод /typings/tsd.json для обработки файлов.d.ts, и который также использует Typescript module Ключевое слово для компиляции исходного кода в шаблон модуля IIFE javascript. Настройка модуля в tsconfig.json (commonjs / amd / etc.) Игнорируется этим ключевым словом.

Для демонстрации я добавляю в этот проект более новый машинописный код, который использует более типичный метод import а также export ключевые слова с загрузчиком модулей SystemJS, с файлами.d.ts в /node_modules/@types/.

После некоторой гимнастики Gulp/SystemJS все это работает вместе во время выполнения, и я нахожусь на пути, чтобы уложиться в свой срок. Но у меня возникают проблемы во время компиляции по одному сценарию, который я хотел бы решить.

Когда я изменяю старый код, чтобы использовать класс (модель) из более нового кода, я хотел бы, чтобы старый код знал о.d.ts нового кода. Поэтому я добавил в начало файла старого кода /// <reference path="../../newercode/feature4/models/NewerModels.d.ts"/>, (С другой стороны, я помещаю ту же строку в tsd.d.ts, но получаю тот же результат.)

Компилятор жалуется, что мой старый код "имеет или использует личное имя" NewModel "".

Внутри NewerModels.d.ts import а также export ключевые слова все еще существуют, хотя ни один из файлов.d.ts, уже находящихся в / typings /, не использует эти ключевые слова. Эти ключевые слова являются причиной ложной ошибки компилятора.

Устаревший проект требует окружающих файлов.d.ts, более новый код создает не окружающий.

Что я могу с этим поделать?

1 ответ

Решение

Мое текущее решение не идеально, но оно работает в демонстрационных целях.

Я создаю новую папку в / typings /, называемую / feature4 /, и копирую туда соответствующие файлы .d.ts. Отредактируйте их, чтобы удалить export ключевые слова, измените, если необходимо, чтобы удалить import ключевые слова и заменить class ключевое слово с interface чтобы предотвратить исправление устаревшего кода от попытки сырой new NewerModel() вызов.

Этот последний бит, очевидно, не будет работать, потому что новые классы на самом деле не существуют в глобальном пространстве имен, и изменение от class в interface помогает препятствовать этому. Поскольку я в основном берусь за модели, интерфейс не теряет никакой функциональности, кроме необходимости new NewerModel() быть написано как <NewerModel>{}, но я все еще получаю проверку во время компиляции на свойства модели, что в любом случае составляет 95% от того, что я хотел.

У меня также есть несколько служб, которые обрабатываются таким же образом, но вызов методов для них все еще работает из-за внедрения зависимостей. Сервисы никогда не вызывались из глобального пространства имен для начала.

Это решение, очевидно, будет иметь проблему, если кто-то изменит /newercode/feature4/models/NewerModels.ts, но 1) не должно быть никаких проблем между текущим и крайним сроком, и 2) если это действительно проблема, я мог бы создать задачу Gulp автоматизировать копирование и редактирование файлов .d.ts в каждой сборке.

Другие вопросы по тегам