Saya baru saja akan mulai menggunakan TypeScript
proyek klien HTML saya yang termasuk dalam proyek MVC dengan model domain kerangka entitas yang sudah ada. Saya ingin dua proyek saya (sisi klien dan sisi server) benar-benar terpisah karena dua tim akan mengerjakan ini ... JSON dan REST digunakan untuk mengkomunikasikan objek bolak-balik.
Tentu saja, domain
objek saya di sisi klien harus cocok dengan objek di sisi server. Dulu, saya biasanya melakukannya secara manual. Apakah ada cara untuk menggunakan kembali definisi kelas C # saya (khususnya POJO
kelas dalam model domain saya) untuk membuat kelas yang sesuai di TypeScript "?
javascript
typescript
pabloelustondo
sumber
sumber
Jawaban:
Saat ini tidak ada apa pun yang akan memetakan C # ke TypeScript. Jika Anda memiliki banyak POCO atau menurut Anda mungkin sering berubah, Anda dapat membuat konverter - sesuatu yang sederhana di sepanjang ...
Untuk
Ada juga diskusi di Codeplex tentang pembuatan otomatis dari C # .
Hanya untuk terus memperbarui, TypeLite dapat menghasilkan antarmuka TypeScript dari C #:
http://type.litesolutions.net/
sumber
Web Essentials memungkinkan untuk mengkompilasi file C # ke
.d.ts
file TypeScript saat disimpan. Kemudian Anda dapat merujuk definisi dari.ts
file Anda .sumber
TypeLite dan T4TS di atas keduanya tampak bagus, cukup pilih satu, TypeLite, buat garpu untuk mendapatkan dukungan
Lalu aku membutuhkan C # antarmuka dan berpikir inilah saatnya untuk membuat barang saya sendiri dan menulis skrip T4 sederhana yang hanya melakukan apa yang saya butuhkan. Ini juga termasuk Enums . Tidak perlu repo, cukup <100 baris T4.
Pemakaian
Tidak ada perpustakaan, tidak ada NuGet, hanya file T4 sederhana ini - gunakan "tambahkan item" dalam Visual Studio dan pilih template T4 apa saja. Kemudian tempel ini ke dalam file. Sesuaikan setiap baris dengan "ACME" di dalamnya. Untuk setiap kelas C # tambahkan satu baris
Urutan penting, semua jenis yang diketahui akan digunakan dalam antarmuka follwing. Jika Anda hanya menggunakan antarmuka, ekstensi file bisa .d.ts , untuk enum Anda memerlukan file .ts , karena variabel dibuat.
Kustomisasi
Meretas skrip.
Tingkat skrip berikutnya adalah membuat antarmuka layanan dari kelas MVC JsonController.
sumber
typeof(ParticleKind)
di dalamEnum<T>
. Tentunya harus begitutypeof(T)
? Anda juga perlu memperbaruibool
agar menjadiboolean
versi TypeScript yang lebih baruconst enum
s baru . Terima kasih atas contohnya. Itu sangat dekat dan memberi saya hasil kerja lebih cepat.Jika Anda menggunakan vscode, Anda dapat menggunakan ekstensi saya csharp2ts yang melakukan hal itu.
Anda cukup memilih kode C # yang ditempelkan dan menjalankan
Convert C# to TypeScript
perintah dari palet perintah Contoh konversi:untuk
sumber
Inilah pendekatan saya untuk menyelesaikannya. Deklarasikan kelas C # Anda dengan atribut dan .d.ts-files akan dibuat (menggunakan transformasi T4). Ada paket di nuget dan sumbernya tersedia di github . Saya masih mengerjakan proyek ini, tetapi dukungannya cukup ekstensif.
sumber
Jika Anda menggunakan Visual Studio, tambahkan ekstensi Mesin Ketik.
Galeri Visual Studio
Situs web / Dokumentasi
Memperbarui
Dengan Web Essentials diinstal di VS 2015, Anda dapat mengklik kanan file kelas, lalu> Web Essentials> Buat File Intellisense Skrip Ketik dari menu konteks.
sumber
Coba kerangka kerja Reinforced.Typings. Sepertinya itu menyelesaikan masalah Anda.
Arahkan ke POCO Anda dan tambahkan
[TsInterface]
atribut di atasnyaTemukan kode TypeScript yang dihasilkan dalam
%Your_Project_Directory%/Scripts/project.ts
file dan tambahkan ke proyek secara manualproject.ts
di kode TypeScript Anda yang lain.Lihat detail lebih lanjut di wiki dokumentasi
sumber
Saya telah membuat utilitas kecil yang dapat menghasilkan antarmuka TypeScript dari kelas C #. Tersedia sebagai paket NuGet . Dokumentasi terperinci dapat ditemukan di halaman web proyek .
sumber
Silakan lihat di perpustakaan ini Mesin Ketik
Itu mengubah tidak hanya kelas, enum, antarmuka dll, tetapi juga pengontrol api, yang sangat mengagumkan ..
Selain itu, ia melakukannya segera setelah Anda menyimpan file .cs sumber, jadi saya tidak perlu memicu alat eksternal apa pun. Simpan .cs dan dapatkan pembaruan .ts
sumber
Saya punya sedikit solusi yang menggunakan template T4 ( lihat sumber ).
Anda pergi dari CLR POCO mana saja:
Ke antarmuka TypeScript:
sumber
Anda dapat menggunakan proyek sumber terbuka NSwag : Di GUI, Anda dapat memilih kelas .NET dari DLL .NET yang ada dan membuat antarmuka TypeScript untuknya.
Proyek ini juga menyediakan alat baris perintah dan dukungan untuk templat T4 serta pembuatan kode klien untuk pengontrol API Web ...
sumber
Jika Anda perlu membuat file terpisah untuk setiap kelas / antarmuka TypeScript yang dihasilkan (yaitu dengan cara "kelas tunggal per file"), Anda dapat mencoba TypeGen . Ini adalah alat yang dapat Anda gunakan dari Package Manager Console untuk menghasilkan file TypeScript berdasarkan C # class / enums Anda. Saat ini mendukung:
ditambah beberapa fitur tambahan. Ini juga open source (Anda dapat memeriksanya di github ).
sumber
Bagaimana dengan sebaliknya?
Lihat erecruit TypeScript Translator . Itu datang dengan dukungan C # siap pakai, tetapi sebenarnya berbasis template (menggunakan Nunjucks untuk rendering), yang berarti dapat menghasilkan apa pun - VB.NET, F #, C ++, XML, SQL - apa pun yang dapat Anda encode dengan template.
Berfungsi sebagai program konsol .NET, program NodeJS (untuk mereka yang tidak menggunakan Windows), atau sebagai ekstensi Visual Studio , lengkap dengan fungsi buat-simpan. Dan termasuk dukungan MSBuild, hanya untuk membuat server build Anda senang. :-)
sumber
Anda juga dapat menggunakan ini: https://github.com/pankleks/TypeScriptBuilder
Pustaka kecil ini menghasilkan definisi tipe TypeScript berdasarkan tipe C #. Gunakan secara langsung di proyek C # backend Anda untuk menghasilkan kode untuk proyek TypeScript frontend Anda. Anda juga dapat membuat aplikasi konsol kecil, untuk menghasilkan kode dengan alat pra-bangun.
Bekerja pada kerangka Full & NET Core!
Instal dengan nuget:
Install-Package TypeScriptBuilder
Fitur yang didukung
any
untuk jenis yang tidak dapat diubahDeskripsi selengkapnya: https://github.com/pankleks/TypeScriptBuilder/blob/master/README.md
sumber
TypeScriptBuilder
dan sejauh ini terlihat luar biasa; hore untuk dukungan .NET Core!Guys lihat di https://github.com/reinforced/ Reinforced.Typings . Saya telah bermain-main dengan template typelite dan t4 selama beberapa hari terakhir dan berakhir dengan proyek ini. Ini sangat sederhana dan bekerja seperti pesona. Dapatkan saja paketnya, ubah file konfigurasi (seperti selama 10 detik) dan buat. Semua dilakukan secara otomatis tanpa masalah apa pun. Berkatilah penulisnya!
Hal buruk tentang template T4 adalah bahwa setelah Anda membangun dari VS, rakitan yang dipindai terkunci dan Anda harus memulai ulang VS (betapa konyolnya itu?). Ada beberapa solusi di T4 Toolbox + beberapa arahan pembersihan VS tetapi tidak ada yang berhasil untuk saya.
sumber
Saya suka solusi citykid. Saya telah memperpanjangnya sedikit. Jadi, solusi juga didasarkan pada teknik pembuatan kode dengan template T4.
Itu dapat menghasilkan tipe TypeScript umum dan deklarasi ambient.
Ini mendukung pewarisan dan implementasi antarmuka.
Mendukung generik, array dan daftar sebagai bidang tipe.
Juga diterjemahkan ke jenis TypeScript yang tidak secara eksplisit disebutkan dalam konfigurasi (misalnya kita mengimpor tipe A, dan dalam keluaran TS Anda dapat menemukan beberapa jenis lain: jenis bidang, jenis dasar, dan antarmuka).
Anda juga dapat mengganti nama tipe.
Enum juga didukung.
Contoh penggunaan (Anda dapat menemukannya di repositori proyek):
Dan Anda akan mendapatkan hasil
Periksa solusi lengkapnya di sini: https://bitbucket.org/chandrush/cst4ts
sumber
Anda juga dapat menggunakan Bridge.net. Dari versi 1.7 itu mendukung pembuatan definisi TypeScript untuk tipe C #. Lihat http://bridge.net/docs/generate-typescript-definitions/
sumber
Saya juga sangat menyukai jawaban @ citykid, jadi saya memperluasnya untuk membuat seluruh namespace dalam satu waktu. Letakkan saja kelas POCO ke dalam namespace, dan buat ulang template T4. Saya berharap saya tahu bagaimana membuat file terpisah untuk masing-masing, tapi itu bukan akhir dari dunia.
Anda perlu mereferensikan file .DLL di bagian atas (di mana kelas yang Anda inginkan), dan Anda perlu menyebutkan namespace. Semua baris yang akan diedit ditandai dengan ACME. Pujian utama untuk @citykid, hargai!
sumber
Solusi saya adalah menulis util codegen kecil yang hanya mengambil rakitan proyek (dan merujuk rakitan) dan mulai memindai jenis yang terlibat dalam interaksi antara skrip ketikan dan c #. Ut ini mengeluarkan kedua javascript sebagai d.ts ... Alat ini dipanggil dalam acara pasca-pembuatan ... bekerja seperti pesona!
sumber
Jika tertarik, Anda bisa menggunakan TypedRpc . Tujuannya tidak hanya untuk membuat antarmuka di TypeScript, tetapi untuk membuat semua komunikasi dengan layanan di .Net menggunakan protokol JsonRpc.
Contoh kelas di server:
Penggunaan kode TypeScript yang dihasilkan:
Lihat https://github.com/Rodris/TypedRpc untuk contoh lain tentang cara menggunakannya.
sumber
Generator Klien API Web ASP.NET mungkin lebih berguna, lebih sedikit overhead daripada toolchain yang angkuh dan lainnya selama SDLC.
Sementara programmer umumnya menggunakan WebApiClientGen untuk menghasilkan kode API klien, proyek ini juga menyediakan POCO2TS.exe, program baris perintah yang menghasilkan antarmuka TypsScript dari kelas POCO. Anda dapat menggunakan Poco2ts.exe atau komponen poco2ts untuk mengintegrasikan pembuatan kode dengan pipeline build Anda.
sumber
Jika Anda ingin mengubahnya melalui node.js maka Anda dapat menggunakan paket ini (csharp-to-typescript). https://www.npmjs.com/package/csharp-to-typescript
kode sumber: https://github.com/YuvrajSagarRana/csharp-to-typescript
sumber
Jika Anda menggunakan VSCode, Anda dapat melihat ekstensi C # ke TypeScript
Lihat bagaimana saya bisa mengubahnya dari kode C # hanya dengan satu klik. Tentu saja, tidak semua kelas akan dikonversi seperti pabrik, tetapi cukup baik untuk sisi klien. Kami hanya membutuhkan bentuk datanya. Terkadang jika saya perlu menggunakan pola pengunjung, saya akan menghias dengan metode tambahan yang saya butuhkan. Hanya butuh 5 detik untuk melakukannya. Dibandingkan dengan satu menit di atas, saya bisa mengatakan ini adalah kemenangan besar.
Lihat lebih detail di posting blog saya
sumber