Mam zamiar zacząć używać TypeScript
w moim projekcie klienta HTML, który należy do projektu MVC z już istniejącym modelem domeny platformy jednostki. Chcę, aby moje dwa projekty (po stronie klienta i po stronie serwera) były całkowicie oddzielone, ponieważ dwa zespoły będą nad tym pracować ... JSON i REST są używane do komunikacji obiektów w tę iz powrotem.
Oczywiście moje domain
obiekty po stronie klienta powinny pasować do obiektów po stronie serwera. W przeszłości zwykle robiłem to ręcznie. Czy istnieje sposób ponownego użycia definicji klas języka C # (szczególnie POJO
klas w modelu domeny) w celu utworzenia odpowiednich klas w języku TypeScript ”?
javascript
typescript
pabloelustondo
źródło
źródło
Odpowiedzi:
Obecnie nie ma niczego, co zamapuje C # na TypeScript. Jeśli masz dużo POCO lub myślisz, że mogą się one często zmieniać, możesz stworzyć konwerter - coś prostego na wzór ...
Do
Istnieje również dyskusja w Codeplex o automatycznym generowaniu z C # .
Aby zachować aktualność, TypeLite może generować interfejsy TypeScript z C #:
http://type.litesolutions.net/
źródło
Oprogramowanie Web Essentials umożliwia kompilowanie plików C # do
.d.ts
plików TypeScript przy zapisywaniu. Następnie możesz odwołać się do definicji z.ts
plików.źródło
TypeLite i T4TS powyżej oba wyglądały dobrze, po prostu wybrałem jeden, TypeLite, rozwidlił go, aby uzyskać wsparcie
Potem potrzebowałem interfejsów C # i pomyślałem, że nadszedł czas, aby upiec własne rzeczy i napisałem prosty skrypt T4, który po prostu robi to, czego potrzebuję. Obejmuje również wyliczenia . Nie jest wymagane repozytorium, tylko <100 linii T4.
Użycie
Brak biblioteki, brak pakietu NuGet, tylko ten zwykły, prosty plik T4 - użyj opcji „dodaj element” w programie Visual Studio i wybierz dowolny szablon T4. Następnie wklej to do pliku. Dostosuj każdą linię z „ACME” w niej. Dla każdej klasy C # dodaj linię
Kolejność ma znaczenie, każdy znany typ zostanie użyty w kolejnych interfejsach. Jeśli używasz tylko interfejsów, rozszerzenie pliku może być .d.ts , dla wyliczeń potrzebny jest plik .ts , ponieważ tworzona jest instancja zmiennej.
Dostosowywanie
Zhakuj skrypt.
Kolejnym poziomem skryptu będzie stworzenie interfejsu usługi z klasy MVC JsonController.
źródło
typeof(ParticleKind)
w swoimEnum<T>
. Z pewnością tak powinno byćtypeof(T)
? Musisz także zaktualizować,bool
aby byćboolean
dla późniejszych wersji TypeScriptconst enum
. Dzięki za przykład. Było bardzo blisko i znacznie szybciej dało mi wynik pracy.Jeśli używasz vscode, możesz użyć mojego rozszerzenia csharp2ts, które robi dokładnie to.
Wystarczy zaznaczyć wklejony kod C # i uruchomić
Convert C# to TypeScript
polecenie z palety poleceń Przykład konwersji:do
źródło
Oto moje podejście do rozwiązania tego problemu. Zadeklaruj swoje klasy C # z atrybutem, a pliki .d.ts zostaną wygenerowane (przy użyciu transformacji T4). W witrynie nuget znajduje się pakiet, a źródło jest dostępne na github . Nadal pracuję nad projektem, ale wsparcie jest dość obszerne.
źródło
Jeśli używasz programu Visual Studio, dodaj rozszerzenie Maszyna do pisania.
Galeria programu Visual Studio
Witryna internetowa / Dokumentacja
Aktualizacja
Po zainstalowaniu programu Web Essentials w programie VS 2015 można kliknąć prawym przyciskiem myszy plik klasy, a następnie z menu kontekstowego wybrać> Web Essentials> Utwórz plik Typescript Intellisense.
źródło
Wypróbuj framework Reinforced.Typings. Wygląda na to, że to rozwiązuje Twój problem.
Przejdź do swojego POCO i dodaj
[TsInterface]
atrybut nad nimZnajdź wygenerowany kod TypeScript w
%Your_Project_Directory%/Scripts/project.ts
pliku i dodaj go do projektu ręcznieproject.ts
w innym kodzie TypeScript.Zobacz więcej szczegółów w dokumentacji wiki
źródło
Stworzyłem małe narzędzie, które może generować interfejsy TypeScript z klas C #. Jest dostępny jako pakiet NuGet . Szczegółową dokumentację można znaleźć na stronie projektu .
źródło
Proszę spojrzeć na tę bibliotekę Maszyna do pisania
Konwertuje nie tylko klasy, wyliczenia, interfejsy itp., Ale także kontrolery API, co jest po prostu niesamowite.
Dodatkowo robi to zaraz po zapisaniu źródłowego pliku .cs, więc nie muszę uruchamiać żadnego zewnętrznego narzędzia. Zapisz plik .cs, a otrzymasz zaktualizowany plik .ts
źródło
Mam małe rozwiązanie, które wykorzystuje szablony T4 ( zobacz źródło ).
Idziesz z dowolnego CLR POCO:
Do interfejsu TypeScript:
źródło
Możesz użyć projektu NSwag typu open source : w GUI możesz wybrać klasę .NET z istniejącej biblioteki DLL .NET i wygenerować dla niej interfejs TypeScript.
Projekt zapewnia również narzędzia wiersza poleceń i obsługę szablonów T4, a także generowanie kodu klienta dla kontrolerów Web API ...
źródło
Jeśli chcesz utworzyć oddzielny plik dla każdej wygenerowanej klasy / interfejsu TypeScript (tj. W sposób „pojedyncza klasa na plik”), możesz wypróbować TypeGen . Jest to narzędzie, którego można używać z poziomu konsoli Menedżera pakietów do generowania plików TypeScript na podstawie klas / wyliczeń C #. Obecnie obsługuje:
plus kilka dodatkowych funkcji. Jest to również open source (możesz to sprawdzić na github ).
źródło
A co na odwrót?
Sprawdź erecruit TypeScript Translator . Jest wyposażony w gotową obsługę C #, ale w rzeczywistości jest oparty na szablonach (używa Nunjucks do renderowania), co oznacza, że może generować wszystko inne - VB.NET, F #, C ++, XML, SQL - wszystko, co możesz zakodować za pomocą szablonu.
Działa jako program konsoli .NET, program NodeJS (dla tych spoza systemu Windows) lub jako rozszerzenie programu Visual Studio , wraz z funkcją generowania przy zapisywaniu. Obejmuje również obsługę MSBuild, aby Twój serwer kompilacji był zadowolony. :-)
źródło
Możesz również użyć tego: https://github.com/pankleks/TypeScriptBuilder
Ta mała biblioteka generuje definicję typu TypeScript na podstawie typów C #. Użyj go bezpośrednio w projekcie C # zaplecza, aby wygenerować kod dla projektu frontendowego TypeScript. Możesz również napisać małą aplikację konsolową, aby wygenerować kod za pomocą narzędzi do kompilacji wstępnej.
Działa na platformie Full & NET Core!
Zainstaluj przez nuget:
Install-Package TypeScriptBuilder
Obsługiwane funkcje
any
dla typów, których nie można konwertowaćWięcej opisu: https://github.com/pankleks/TypeScriptBuilder/blob/master/README.md
źródło
TypeScriptBuilder
i na razie wygląda świetnie; brawo za wsparcie .NET Core!Chłopaki spójrz na https://github.com/reinforced/ Reinforced.Typings . Bawiłem się szablonami Typelite i T4 przez ostatnie kilka dni i skończyłem z tym projektem. Jest bardzo prosty i działa jak urok. Po prostu pobierz pakiet, zmodyfikuj plik konfiguracyjny (jest to około 10 sekund) i zbuduj. Wszystko odbywa się automatycznie, bez żadnych problemów. Pobłogosław autora!
Wadą szablonów T4 jest to, że po skompilowaniu z VS zeskanowane zestawy są zablokowane i trzeba ponownie uruchomić VS (jakie to głupie?). Istnieją pewne obejścia w T4 Toolbox + niektóre dyrektywy czyszczenia VS, ale żadna z nich nie zadziałała.
źródło
Podoba mi się rozwiązanie citykid. Trochę go przedłużyłem. Tak więc rozwiązanie jest również oparte na technice kodegeneracji z szablonami T4.
Może generować typowe typy TypeScript i deklaracje otoczenia.
Obsługuje dziedziczenie i implementacje interfejsów.
Obsługuje typy ogólne, tablice i listy jako pola typu.
Przekłada się również na typy TypeScript, które nie są wyraźnie wymienione w konfiguracji (na przykład importujemy typ A, aw wynikach TS można znaleźć inne typy: typy pól, typy podstawowe i interfejsy).
Możesz także zastąpić nazwę typu.
Obsługiwane są również wyliczenia.
Przykład użycia (można go znaleźć w repozytorium projektu):
Otrzymasz wynik
Sprawdź pełne rozwiązanie tutaj: https://bitbucket.org/chandrush/cst4ts
źródło
Możesz także użyć Bridge.net. Od wersji 1.7 obsługuje generowanie definicji TypeScript dla typów C #. Zobacz http://bridge.net/docs/generate-typescript-definitions/
źródło
Bardzo podobała mi się również odpowiedź @ citykid, więc rozszerzyłem ją tak, aby zajmowała się jednocześnie całą przestrzenią nazw. Po prostu umieść klasy POCO w przestrzeni nazw i przebuduj szablony T4. Chciałbym wiedzieć, jak wygenerować osobne pliki dla każdego, ale to nie koniec świata.
Musisz odwołać się do plików .DLL w górnej części (tam, gdzie chcesz, aby klasy) i musisz wspomnieć o przestrzeniach nazw. Wszystkie linie do edycji są oznaczone ACME. Wielkie cuda dla @citykid, doceniam to!
źródło
Moim rozwiązaniem było napisanie małego narzędzia do kodowania, które po prostu pobiera zestaw projektu (i odwołuje się do zestawów) i rozpoczyna skanowanie typów, które są zaangażowane w interakcję między skryptem maszynowym a językiem C #. To narzędzie generuje zarówno javascript jako d.ts ... To narzędzie jest wywoływane w zdarzeniu post-build ... działa jak urok!
źródło
Jeśli jesteś zainteresowany, możesz użyć TypedRpc . Jego celem jest nie tylko tworzenie interfejsów w języku TypeScript, ale tworzenie całej komunikacji z usługą w .Net przy użyciu protokołu JsonRpc.
Przykład zajęć na serwerze:
Wykorzystanie wygenerowanego kodu TypeScript:
Sprawdź https://github.com/Rodris/TypedRpc, aby zobaczyć inne przykłady, jak z niego korzystać.
źródło
Generatory klientów ASP.NET Web API mogą być wygodniejsze i mniej obciążać niż Swagger Toolchain i inne podczas SDLC.
Podczas gdy programiści generalnie używają WebApiClientGen do generowania kodów API klienta, ten projekt zapewnia również POCO2TS.exe, program wiersza polecenia, który generuje interfejsy TypsScript z klas POCO. Możesz użyć Poco2ts.exe lub komponentu poco2ts, aby zintegrować generowanie kodu z potokiem kompilacji.
źródło
Jeśli chcesz przekonwertować go za pomocą node.js, możesz użyć tego pakietu (csharp-to-typescript). https://www.npmjs.com/package/csharp-to-typescript
kod źródłowy: https://github.com/YuvrajSagarRana/csharp-to-typescript
źródło
Jeśli używasz VSCode, możesz rzucić okiem na to rozszerzenie C # do TypeScript
Zobacz, jak mogę przekonwertować go z kodu C # jednym kliknięciem. Oczywiście nie wszystkie klasy zostaną przekonwertowane, tak jak fabryka, ale jest to wystarczająco dobre dla klienta. Potrzebujemy tylko kształtu danych. Czasami, jeśli potrzebuję użyć wzoru gościa, ozdobię dodatkowymi metodami, których potrzebuję. Zajęło to tylko 5 sekund. W porównaniu z minutą powyżej, mogę powiedzieć, że to duża wygrana.
Zobacz więcej szczegółów w moim poście na blogu
źródło