Ako otypovať javascript?

Ako otypovať javascript?
« kdy: 05. 05. 2020, 23:24:49 »
Kúpil som si reactové templaty napísané v čistom JS (neviem kolkatka ES, ale používajú sa tam nové vymoženosti JS ako class, arrow funkcie)

No a chcel by som to celé prekopať do TypeScriptu jednoducho to celé automaticky otypovať. Nemusí to byť otypované úplne všetko (to sa ani nedá), ale bolo by fajn keby to malo nejakú pokročilú techniku type inference alebo statickej analýzy (či čo to je), ktorou by si tie typy vedelo odvodiť nejako podľa literálov a aj pospájať do komplexnejších typov.

1. napr podľa tohoto:

Kód: [Vybrat]
var point3D = { x: 5, y: 15, z: -12, color: { r: 255, g: 124, b: 24. a: 1 } };
by si odvodilo takéto typové definície:

Kód: [Vybrat]
type TPoint3D = {
    x: number;
    y: number;
    z: number;
    color: TColor;
}

type TColor = {
    r: number;
    g: number;
    b: number;
    a: number;
}

Ale samozrejme by to malo vedieť aj skladať typy podľa toho ako sú použité na viacerých miestach v kóde.

2. A ďalej by to mohlo vedieť odvodzovať podľa jsx napr keby sme mali takúto komponentu:

Kód: [Vybrat]
<TextBox
    text="Nejaky string"
    rows={4}
    acceptsReturns={true}
/>

tak podľa toho by vedelo odvodiť:

Kód: [Vybrat]
type TTextBoxProps = {
    text: string;
    rows: number;
    acceptsReturns: boolean;
}

// a potom do classy by pridalo TTextBoxProps podľa atribútov
class TextBox extends React.Component<TTextBoxProps, {}> {
...

Viete o niečom takom? Vopred ďakujem.


L..

  • ****
  • 302
    • Zobrazit profil
    • E-mail
Re:Ako otypovať javascript?
« Odpověď #1 kdy: 06. 05. 2020, 00:17:07 »
Nevím a pochybuji, že by to existovalo. Je to dost komplikovaná úloha a hlavně podle mě v některých případech nejednoznačná.

Akorát by mě docela zajímalo, co je to za "templaty", když se vyplatí za ně platit a to dokonce i přes to, že jsou ne úplně vyhovující...

Re:Ako otypovať javascript?
« Odpověď #2 kdy: 06. 05. 2020, 07:32:36 »
Souhlasím s L.. – kdyby něco takového existovalo, všichni to používáme a neřešíme staticky typované jazyky.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Ako otypovať javascript?
« Odpověď #3 kdy: 06. 05. 2020, 10:26:05 »
O ničem takovém nevím, ale je to zajímavá teoretická úloha. Typová inference funguje spolehlivě s atomickými typy, ale odvození kompozice typů z literálů pro asociativní pole je netriviální (ale proveditelné).

Re:Ako otypovať javascript?
« Odpověď #4 kdy: 07. 05. 2020, 19:58:53 »
Ďakujem Vám za odpovede.

Sú to UI templaty, nie som grafik a chcem aby moja appka vyzerala podľa možnosti čo najviac profesionálne, každý template obsahuje hotové komponenty a obrazovky na rôzne účely, ktoré budem môcť použiť (samozrejme si ich upravím na svoj obraz). Možno by som zvládol spraviť graficky pekné rozhranie aj sám, ale zabralo by mi to oveľa viac času a preto to radšej zverím do rúk profesionálom, ktorí majú umelecké cítenie a ktorí si svoje skilly pravidelne precvičujú. No a keďže moja aplikácia bude používať v admine React vybral som template, ktorý je postavený na reacte. Aby som tú grafiku nemusel narezať a vyrábať si z nej komponenty sám (appku si kódim vo voľnom čase tak chcem aby čo najviac práce za mňa urobil niekto iný). Každopádne templaty, ktoré by používali typescript som nenašiel vačšina používa JS takže si to asi otypujem ručne, ale skúsim nájsť nejaký tool ktorý by čo najviac práce urobil za mňa. A ešte budem potrebovať ďalší tepmplate na frontend a na ten budú kladené úplne iné požiadavky.

Ja som jeden jednoduchý nástroj na otypovanie zdrojákov našiel ale ten toho veľa nedokáže: https://github.com/gregjacobs/js-to-ts-converter A skoro všade popridáva  any :( Každopádne aj to je lepšie ako nič.


Re:Ako otypovať javascript?
« Odpověď #5 kdy: 07. 05. 2020, 20:04:29 »
O ničem takovém nevím, ale je to zajímavá teoretická úloha. Typová inference funguje spolehlivě s atomickými typy, ale odvození kompozice typů z literálů pro asociativní pole je netriviální (ale proveditelné).

Možno je to dobrý námet pre ročníkovú, alebo diplomovú prácu... lebo taký tool by bol veľmi užitočný a aj keby sa predával napríklad ako komerčná applikácia tak ja by som za ňu asi zaplatil.

Re:Ako otypovať javascript?
« Odpověď #6 kdy: 07. 05. 2020, 20:24:07 »
O ničem takovém nevím, ale je to zajímavá teoretická úloha. Typová inference funguje spolehlivě s atomickými typy, ale odvození kompozice typů z literálů pro asociativní pole je netriviální (ale proveditelné).

Možno je to dobrý námet pre ročníkovú, alebo diplomovú prácu... lebo taký tool by bol veľmi užitočný a aj keby sa predával napríklad ako komerčná applikácia tak ja by som za ňu asi zaplatil.
IDE odvozování typů v JavaScriptu dělají, aby fungoval našeptávač. Ale je to dost přibližné, zejména u projektů používajících nějaký framework, který je na dynamickém typování postaven. Nemyslím si, že by bylo možné to v rámci jedné ročníkové práce nějak výrazně vylepšit.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Ako otypovať javascript?
« Odpověď #7 kdy: 07. 05. 2020, 21:00:55 »
O ničem takovém nevím, ale je to zajímavá teoretická úloha. Typová inference funguje spolehlivě s atomickými typy, ale odvození kompozice typů z literálů pro asociativní pole je netriviální (ale proveditelné).
Možno je to dobrý námet pre ročníkovú, alebo diplomovú prácu...
To mě taky napadlo, je to hezké téma.