Я просто собираюсь начать использовать TypeScript
свой клиентский проект HTML, который принадлежит проекту MVC с уже существующей моделью предметной области. Я хочу, чтобы мои два проекта (клиентская и серверная) были полностью разделены, так как над этим будут работать две команды ... JSON и REST используются для передачи объектов туда и обратно.
Конечно, мои domain
объекты на стороне клиента должны соответствовать объектам на стороне сервера. Раньше я обычно делал это вручную. Есть ли способ повторно использовать определения моих классов C # (особенно POJO
классов в моей модели предметной области) для создания соответствующих классов в TypeScript »?
javascript
typescript
pabloelustondo
источник
источник
Ответы:
В настоящее время нет ничего, что отображало бы C # в TypeScript. Если у вас много POCO или вы думаете, что они могут часто меняться, вы можете создать конвертер - что-то простое вроде ...
к
На Codeplex также обсуждается автоматическая генерация из C # .
Чтобы держать вещи в курсе, TypeLite может генерировать интерфейсы TypeScript из C #:
http://type.litesolutions.net/
источник
Web Essentials позволяет компилировать файлы C # в файлы TypeScript
.d.ts
при сохранении. Затем вы можете ссылаться на определения из своих.ts
файлов.источник
Оба TypeLite и T4TS выглядели хорошо, просто выбрал один, TypeLite, разветвил его, чтобы получить поддержку
Затем мне понадобились интерфейсы C #, и я подумал, что пора испечь свою вещь, и написал простой сценарий T4, который делает то, что мне нужно. Он также включает перечисления . Репо не требуется, всего <100 строк T4.
Использование
Нет библиотеки, нет NuGet, только простой простой файл T4 - используйте «добавить элемент» в Visual Studio и выберите любой шаблон T4. Затем вставьте это в файл. Адаптируйте каждую строчку, добавив в нее «ACME». Для каждого класса C # добавьте строку
Порядок имеет значение, в следующих интерфейсах будет использоваться любой известный тип. Если вы используете только интерфейсы, расширение файла может быть .d.ts , для перечислений вам понадобится файл .ts , поскольку создается экземпляр переменной.
Кастомизация
Взломайте скрипт.
Следующим уровнем сценария будет создание интерфейса службы из класса MVC JsonController.
источник
typeof(ParticleKind)
в вашемEnum<T>
. Неужто так должно бытьtypeof(T)
? Также вам необходимо обновитьbool
до болееboolean
поздних версий TypeScriptconst enum
s. Спасибо за пример. Это было очень близко, и я получил рабочий результат намного быстрее.Если вы используете vscode, вы можете использовать мое расширение csharp2ts, которое делает именно это.
Вы просто выбираете вставленный код C # и запускаете
Convert C# to TypeScript
команду из палитры команд. Пример преобразования:в
источник
Вот мой подход к ее решению. Объявите свои классы C # с атрибутом, и будут созданы файлы .d.ts (с использованием преобразований T4). На nuget есть пакет, а исходный код доступен на github . Я все еще работаю над проектом, но поддержка довольно обширная.
источник
Если вы используете Visual Studio, добавьте расширение Typewriter.
Галерея Visual Studio
Веб-сайт / Документация
Обновить
Если Web Essentials установлен в VS 2015, вы можете щелкнуть правой кнопкой мыши файл класса, затем> Web Essentials> Создать файл Typescript Intellisense из контекстного меню.
источник
Попробуйте фреймворк Reinforced.Typings. Кажется, это решает вашу проблему.
Перейдите к своему POCO и добавьте
[TsInterface]
атрибут над нимНайдите сгенерированный код TypeScript в
%Your_Project_Directory%/Scripts/project.ts
файле и добавьте его в проект вручнуюproject.ts
в другом коде TypeScript.См. Более подробную информацию в документации wiki
источник
Я создал небольшую утилиту, которая может генерировать интерфейсы TypeScript из классов C #. Доступен в виде пакета NuGet . Подробную документацию можно найти на веб-странице проекта .
источник
Пожалуйста, взгляните на эту библиотеку Пишущая машинка
Он конвертирует не только классы, перечисления, интерфейсы и т. Д., Но и контроллеры api, что просто потрясающе.
Кроме того, он делает это, как только вы сохраняете исходный файл .cs, поэтому мне не нужно запускать какой-либо внешний инструмент. Сохраните .cs, и вы получите обновленный .ts
источник
У меня есть небольшое решение, использующее шаблоны T4 ( исходный код ).
Вы переходите из любого CLR POCO:
В интерфейс TypeScript:
источник
Вы можете использовать проект с открытым исходным кодом NSwag : в графическом интерфейсе вы можете выбрать класс .NET из существующей .NET DLL и сгенерировать для него интерфейс TypeScript.
Проект также предоставляет инструменты командной строки и поддержку шаблонов T4, а также создание клиентского кода для контроллеров веб-API ...
источник
Если вам нужно создать отдельный файл для каждого сгенерированного класса / интерфейса TypeScript (т. Е. Способом «один класс на файл»), вы можете попробовать TypeGen . Это инструмент, который вы можете использовать из консоли диспетчера пакетов для создания файлов TypeScript на основе ваших классов / перечислений C #. В настоящее время он поддерживает:
плюс некоторые дополнительные функции. Это также открытый исходный код (вы можете проверить это на github ).
источник
А как насчет другого пути?
Ознакомьтесь с erecruit TypeScript Translator . Он поставляется с готовой к использованию поддержкой C #, но на самом деле основан на шаблоне (использует Nunjucks для рендеринга), что означает, что он может генерировать что угодно - VB.NET, F #, C ++, XML, SQL - все, что вы можете кодировать с помощью шаблона.
Работает как консольная программа .NET, программа NodeJS (для тех, кто не работает в Windows) или как расширение Visual Studio с функцией создания при сохранении. И включает поддержку MSBuild, чтобы сделать ваш сервер сборки счастливым. :-)
источник
Вы также можете использовать это: https://github.com/pankleks/TypeScriptBuilder
Эта небольшая библиотека генерирует определение типа TypeScript на основе типов C #. Используйте его непосредственно в своем внутреннем проекте C #, чтобы сгенерировать код для своего внешнего проекта TypeScript. Вы также можете написать небольшое консольное приложение для генерации кода с помощью инструментов предварительной сборки.
Работает на платформе Full & NET Core!
Установить с помощью nuget:
Install-Package TypeScriptBuilder
Поддерживаемые функции
any
для типов, которые не могут быть преобразованыПодробное описание: https://github.com/pankleks/TypeScriptBuilder/blob/master/README.md
источник
TypeScriptBuilder
и пока все выглядит отлично; ура для поддержки .NET Core!Ребят посмотрите https://github.com/reinformed/ Reinformed.Typings . Я играл с шаблонами typelite и t4 последние несколько дней и в итоге остановился на этом проекте. Это очень просто и работает как шарм. Просто получите пакет, измените конфигурационный файл (примерно 10 секунд) и соберите. Все делается автоматически без каких-либо проблем. Благослови автора!
Плохая вещь в шаблонах T4 заключается в том, что после сборки из VS отсканированные сборки блокируются, и вы должны перезапускать VS (насколько это глупо?). В T4 Toolbox есть обходные пути + некоторые директивы очистки VS, но ни один из них не помог мне.
источник
Мне нравится решение citykid. Пришлось немного расширить. Итак, решение также основано на методике генерации кода с помощью шаблонов T4.
Он может генерировать общие типы TypeScript и внешние объявления.
Он поддерживает наследование и реализации интерфейса.
Поддерживает универсальные шаблоны, массивы и списки как поля типа.
Также он переводится в типы TypeScript, которые явно не упоминаются в конфигурации (например, мы импортируем тип A, а в выводе TS вы можете найти некоторые другие типы: типы полей, базовые типы и интерфейсы).
Вы также можете переопределить имя типа.
Также поддерживаются перечисления.
Пример использования (его можно найти в репозитории проекта):
И вы получите вывод
Проверьте полное решение здесь: https://bitbucket.org/chandrush/cst4ts
источник
Вы также можете использовать Bridge.net. Начиная с версии 1.7 он поддерживает создание определений TypeScript для типов C #. См. Http://bridge.net/docs/generate-typescript-definitions/
источник
Мне также очень понравился ответ @citykid, поэтому я расширил его, чтобы делать все пространство имен за раз. Просто поместите классы POCO в пространство имен и перестройте шаблоны T4. Хотел бы я знать, как создавать отдельные файлы для каждого, но это не конец света.
Вам нужно сослаться на файлы .DLL в верхней части (где находятся нужные вам классы) и указать пространства имен. Все строки для редактирования отмечены ACME. Большое спасибо @citykid, ценю это!
источник
Мое решение заключалось в том, чтобы написать небольшую утилиту для генерации кода, которая просто берет сборку проекта (и ссылается на сборки) и запускает сканирование типов, которые участвуют во взаимодействии между машинописным текстом и C #. Эта утилита выводит оба javascript как d.ts ... Инструмент вызывается в событии после сборки ... работает как шарм!
источник
Если интересно, можете использовать TypedRpc . Его цель - не только создать интерфейсы в TypeScript, но и создать все коммуникации со службой в .Net с использованием протокола JsonRpc.
Пример для класса на сервере:
Использование сгенерированного кода TypeScript:
Посетите https://github.com/Rodris/TypedRpc, чтобы узнать о других примерах его использования.
источник
Генераторы клиентов веб-API ASP.NET могут быть более удобными и менее затратными, чем набор инструментов swagger и другие инструменты во время SDLC.
Хотя программисты обычно используют WebApiClientGen для генерации клиентских кодов API, этот проект также предоставляет POCO2TS.exe, программу командной строки, которая генерирует интерфейсы TypsScript из классов POCO. Вы можете использовать либо Poco2ts.exe, либо компонент poco2ts для интеграции генерации кода с конвейером сборки.
источник
Если вы хотите преобразовать его через node.js, вы можете использовать этот пакет (csharp-to-typescript). https://www.npmjs.com/package/csharp-to-typescript
исходный код: https://github.com/YuvrajSagarRana/csharp-to-typescript
источник
Если вы используете VSCode, вы можете взглянуть на это расширение C # для TypeScript
Посмотрите, как я могу преобразовать его из кода C # одним щелчком мыши. Конечно, не все классы будут преобразованы, например фабрика, но для клиентской стороны этого достаточно. Нам просто нужна форма данных. Иногда, если мне нужно использовать шаблон посетителя, я украсю дополнительными методами, которые мне нужны. Это заняло всего 5 секунд. По сравнению с одной минутой выше, я могу сказать, что это большая победа.
Подробнее см. В моем сообщении в блоге
источник