Подтвердить что ты не робот

Как медленно перемещаться в /w 870> в существующую систему JavaScript

У нас есть уже существующая система JavaScript.

Что мы хотим сделать: Мы хотели бы начать интегрировать TypeScript в текущую систему; Мы не можем просто переместить все на TypeScript. Мы хотим медленно начать писать некоторые из новых модулей в TypeScript.

Что мы пробовали: Мы используем шаблон для организации нашего синтаксиса кода JS в конструкции MODULE TypeScript.

Мы попытались переписать простой класс/объект в TypeScript и были успешными, но у нас были проблемы с доступом к функциям JS, определенным в нашем коде, в других файлах.

Обнаруженные проблемы: Нам приходилось создавать фиктивные интерфейсы и фиктивные функции с использованием этих интерфейсов и т.д.

Итак, вопрос: может кто-нибудь прокомментировать, что было бы лучшим подходом к медленной интеграции TypeScript в существующую систему JavaScript.

4b9b3361

Ответ 1

Похоже, у вас есть разумный план. Вот мои наблюдения!

Лучше всего убедиться, что вы TypeScript зависят от вашего JavaScript, а не наоборот, где это возможно. Это связано с тем, что с помощью инструментов Visual Studio очень легко реорганизовать TypeScript, но он не будет реорганизовывать JavaScript, который вызывает ваш TypeScript.

Вам нужно будет написать файлы определений для частей вашего JavaScript, которые вам нужно вызвать из TypeScript. Вам нужно будет сбалансировать стоимость написания определения со стоимостью простого преобразования JavaScript в TypeScript.

Если вы вызываете только одну функцию, просто напишите определение для этой функции - не записывайте определение, пока оно вам не понадобится. Это позволит снизить стоимость вызова старого кода.

Вы также можете временно использовать тип any, чтобы уйти с вызовом чего-либо на свой код JavaScript. Когда вы конвертируете файл в TypeScript, вы получите лучшую проверку типов. Это точка решения "зависит от". Вместо того, чтобы тратить время на написание определений, вы могли бы сэкономить время за счет проверки типа.

Например...

declare var MyExistingClass: any;

Теперь вы можете позвонить...

var example = new MyExistingClass.Anything();
example.anythingYouLike();

Вы должны решить в качестве команды, является ли это приемлемым или если вы хотите написать определения:

declare class MyExistingClass {
    anythingYouLike(): void;
}

Надеюсь, это поможет.

Ответ 2

Это то, что мы недавно столкнулись с движением движка HTML5 с примерно 100 000 строк JavaScript до TypeScript. Мы обязательно должны были сделать это поэтапно, начиная с простого переименования файлов с .js на .ts и постепенно исходя из этого. Полное описание здесь для всех, кого это интересует:

http://hardcodeded.blogspot.jp/2013/02/mostly-painlessly-migrating-3d-game.html