Konwersja modeli z dziedziczeniem z C# do JS/TS

1

Cześć,

słowem wstępu. Mam API w C#, gdzie dla wielu usług mam bardziej lub mniej skomplikowane modele danych wejściowych/wyjściowych. Druga strona to front w js/ts, który z tych usług korzysta.

Napisałem już program, który przeczesuje modele w API i tworzy typowane obiekty w js/ts. To się w ogólności sprawdza.

Jednak. API ciągle jest poszerzane o nowe usługi, gdzie w konsekwencji uwspólniam kod, pojawia się sporo generyków, abstrakcji, dziedziczenia itd. Wcześniej kiedy miałem prostszy model w C# z prostym dziedziczeniem to konwertowany model do js/ts był tym ostatecznym, złożonym w runtime.

Teraz kiedy zachodzi potrzeba używać w js/ts klas pośrednich, wielo-generyków itd. zachodzi potrzeba przepisania programu do konwersji.

Aktualnie otrzymuję z takiego kodu C#

class A {
  string name
}
class B: A {
  string surname
}
class C: B {
  int age
}

taki obiekt js/ts

interface C {
  name: string
  surname: string
  age: number
}

Przeszukałem trochę neta, przeanalizowałem pracochłonność zmiany. Pytanie brzmi czy jest jakieś oprogramowanie by z dowolnego obiektu C# stworzyć jako tako 1:1 obiekty js/ts z dziedziczeniem, by uzyskać coś w kierunku:

interface A {
  name: string
}
interface B implements A {
  surname: string
}
interface C implements B {
  age: number
}

Link, nazwa, będę wdzięczny.

3

za pomocą tego skryptu (*.nt) możesz bardzo łatwo osiągnąć zamierzony efekt:

{{ capture output
   for class in data.Classes 
-}}   
interface {{ class.Name }}{{ if class.HasBaseClass }} implements  {{ class.BaseClass.Name; end }}
{
{{- for prop in class.Properties }}
    {{prop.Name | String.ToCamelCase}}: {{prop.Type | Type.ToTypeScriptType}} 
{{- end}}
}
{{ end
   end
   Save output "my.ts"
}}

żeby uruchomić skrypt potrzebna jest wtyczka do VS:
NTypewriter

screenshot-20220119155050.png

0

Wygląda obiecująco. Dzięki bardzo za podrzucenie ficzera :)

Idę spróbować podpiąć to pod modele API.

0

Możesz też po prostu uzyć templatki T4. Template nie będzie dużo bardziej skomplikowany, kiedyś coś podobnego nawet napisałem (konwersja obiektów c# -> typescript w T4. Z tym że nie zupełnie bo chodziło o stworzenie dokumentacji w postaci .d.ts z pustymi obiektami). Plus taki że nie potrzeba dodatkowych wtyczek i zmiany w klasach automatycznie generują nowy kod typescript przy kompilacji (nie wiem czy tak się dzieje w przypadku NTypewritera, szczerze nie korzystałem nigdy)

0

Omg, jakieś templatki
nie można jak człowiek?
https://github.com/reinforced/Reinforced.Typings

1 użytkowników online, w tym zalogowanych: 0, gości: 1