Zkušenosti s TypeScriptem

Zkušenosti s TypeScriptem
« kdy: 24. 03. 2020, 11:55:30 »
Zdravím.
Prosím vás, máte někdo zkušenosti s Typescriptem? Jakou?
« Poslední změna: 24. 03. 2020, 12:08:00 od Petr Krčmář »


Re:Zkušenosti s TypeScriptem
« Odpověď #1 kdy: 24. 03. 2020, 12:39:29 »
Dobrou. Cini to z JS pouzitelny jazyk.

Re:Zkušenosti s TypeScriptem
« Odpověď #2 kdy: 24. 03. 2020, 13:11:50 »
On se JavaScript nedá používat?  :)

Re:Zkušenosti s TypeScriptem
« Odpověď #3 kdy: 24. 03. 2020, 13:17:01 »
Dobrou. Cini to z JS pouzitelny jazyk.
Naprostý souhlas. Ja preferuji silněji typovaná prostředí - chyby jsou nalezeny již v době kompilace a také bych řekl, že to programátora nutí k lepšímu designu (na vkusu každého).

Zárověň se jedná o nadmnožinu JavaScriptu (podle nastavených parametrů kompilace), takže to "sežere" i libovolný kus JS, pokud je potřeba.

Podpora je rozšířena napříč všemožnými prostředími/frameworky/build chainy. A asi též není náhodou, že leccos z typescriptu se dostalo do nových verzi ECMA Scriptu (pardon za argumentační faul).

SB

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Zkušenosti s TypeScriptem
« Odpověď #4 kdy: 25. 03. 2020, 11:55:56 »
...Ja preferuji silněji typovaná prostředí - chyby jsou nalezeny již v době kompilace...

Nechtěl jste napsat „některé chyby“?

...také bych řekl, že to programátora nutí k lepšímu designu (na vkusu každého).

Nebo horšímu, protože spoléhá na to, že mu v bordelu pomůže hledat typová analýza?

Nechci se o tom hádat, já jen, že 1. se to tu řešilo několikrát, 2. je to částečně subjektivní záležitost.


Re:Zkušenosti s TypeScriptem
« Odpověď #5 kdy: 25. 03. 2020, 12:30:17 »
Pouzivam kvuli nekterym knihovnam, hlavne typeORM, ale nerad. Koncept postaveny na transpilaci je podle me spatne. Typove anotace lze psat do komentaru a nepotrebujete zadny specialni tooling mimo linteru.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Zkušenosti s TypeScriptem
« Odpověď #6 kdy: 25. 03. 2020, 17:09:26 »
...Ja preferuji silněji typovaná prostředí - chyby jsou nalezeny již v době kompilace...

Nechtěl jste napsat „některé chyby“?
A kdyby to bylo 50% všech chyb? Měnilo by to význam?


...také bych řekl, že to programátora nutí k lepšímu designu (na vkusu každého).

Nebo horšímu, protože spoléhá na to, že mu v bordelu pomůže hledat typová analýza?

Nechci se o tom hádat, já jen, že 1. se to tu řešilo několikrát, 2. je to částečně subjektivní záležitost.
Osobně mám zkušenost, že Typy nutí uvažovat konkrétním způsobem - což by nemuselo být subjektivní. A ten konkrétní způsob je celkem ku prospěchu - to už bude subjektivní.


protože spoléhá na to, že mu v bordelu pomůže hledat typová analýza?

Není mi úplně jasné, co si mám pod tímto představit.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Zkušenosti s TypeScriptem
« Odpověď #7 kdy: 25. 03. 2020, 18:55:49 »
Osobně mám zkušenost, že Typy nutí uvažovat konkrétním způsobem
To mě zaujalo. Jakým? Případně jaké typy, primitivní, generické, závislostní...? Že odchytnou většinu chyb je jasné, ale to specifické uvažování mě zajímá.

Re:Zkušenosti s TypeScriptem
« Odpověď #8 kdy: 25. 03. 2020, 19:05:33 »
za mě TS moc nemusím a to z několika důvodů:
1) založen na transpilaci kódu a to je z mého pohledu zhovadilost,
2) zavádí do JS OOP patten, což je taky kr*vina (ikdyž nový TS už umí FC),
3) pochází od M$

Neříkám, že je TS špatný, typovost je vždy dobrá (alespoň z mého pohledu), ale to co dělá TS umí třeba i Flow, což je jen  type checker a je pekelně rychlý. případné chyby nebrání vlastní kompilaci ES6.

Nehledě na to, že mám s TS špatné zkušenosti - většinou jsem viděl zneužívání typu
Kód: [Vybrat]
any a k tomu nepotřebuji mít TS. A když člověk zakáže použítí any, tak natypovat některé věci správně, je někdy krapet oříšek.

Osobně mi přijde, že TS je "moderní" záležitost. Přednosti, které jsou vychvalovány, stejně tak dobře pokreju Flow a Eslintem, že nevidím důvod používat TS. Nehledě na to, že TS ošetří jen vstupní data a property. Data která lezou např. ze služeb třetích stran nikdy neošetříte.

Re:Zkušenosti s TypeScriptem
« Odpověď #9 kdy: 25. 03. 2020, 19:25:43 »
Jaky je problem s tou transpilaci?

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Zkušenosti s TypeScriptem
« Odpověď #10 kdy: 25. 03. 2020, 19:36:35 »
Osobně mám zkušenost, že Typy nutí uvažovat konkrétním způsobem
To mě zaujalo. Jakým? Případně jaké typy, primitivní, generické, závislostní...? Že odchytnou většinu chyb je jasné, ale to specifické uvažování mě zajímá.

To sem si zase naběh'.

Nemám to tak promyšlené, takže prosím o shovívavost.

Když nemám typy, tak pracuju s chlívečkama. Sem dej tohle číslo, pak hoď sem, tam se s ním bude počítat. Vzniká kód ve stylu:
Kód: [Vybrat]
foo.title = "Mr"
if foo.sex:
  foo.title = "Ms"
foo.title += ": "
foo.title += name
foo.title += " "
foo.title += surname

Když mám typy, alespoň takové ty hodně blbé aka Java, C#, tak bude tendence to někam uklízet. Ale moc to nefunguje.

Když se přitlačí s imutabilitou, tak začne víc dekompozice na stromeček:
Kód: [Vybrat]
Foo(buildName(src1, src2), buildSurname(src1, src4))

když nemohu přetěžovat funkce/metody, tak píšu hodně switch:
Kód: [Vybrat]
function renderAny(x):
  switch (type(x)):
     case "Application":
       return renderApplication(x)
     case "Window"
       return renderWindow(x)
     default:
        error()

Pokud mám k dispozici imutabilitu, statické typování tak mám tendenci to stavět jako kompozici funkcí. (Pokud ne, tak taky, ale protože jsem už ovlivněnej.) Opírám se o to, že mi sem přijde typ Person. Zatímco když nemám typy, tak počítám s tím, že mi sem přijde struktura obsahující name, surname. S typem Person nemohu to co se strukturou.

Když mi přijde třída Renderable tak jí renderuju. Protože tak nějak uvažuju, že ty záruky se vztahují jen na Renderování. Zatímco když mám funkci render přijímající sturkturu, tak renderuju tu strukturu. A přirozeně i něco vypočítám navíc, něco si odložím, něco vytáhnu pokoutně...

Asi to nebude všechno, jen prvotní co mě napadlo.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Zkušenosti s TypeScriptem
« Odpověď #11 kdy: 25. 03. 2020, 22:13:46 »
Osobně mám zkušenost, že Typy nutí uvažovat konkrétním způsobem
To mě zaujalo. Jakým? Případně jaké typy, primitivní, generické, závislostní...? Že odchytnou většinu chyb je jasné, ale to specifické uvažování mě zajímá.

To sem si zase naběh'.

Nemám to tak promyšlené, takže prosím o shovívavost.

Když nemám typy, tak pracuju s chlívečkama. Sem dej tohle číslo, pak hoď sem, tam se s ním bude počítat. Vzniká kód ve stylu:
Kód: [Vybrat]
foo.title = "Mr"
if foo.sex:
  foo.title = "Ms"
foo.title += ": "
foo.title += name
foo.title += " "
foo.title += surname

Když mám typy, alespoň takové ty hodně blbé aka Java, C#, tak bude tendence to někam uklízet. Ale moc to nefunguje.

Když se přitlačí s imutabilitou, tak začne víc dekompozice na stromeček:
Kód: [Vybrat]
Foo(buildName(src1, src2), buildSurname(src1, src4))

když nemohu přetěžovat funkce/metody, tak píšu hodně switch:
Kód: [Vybrat]
function renderAny(x):
  switch (type(x)):
     case "Application":
       return renderApplication(x)
     case "Window"
       return renderWindow(x)
     default:
        error()

Pokud mám k dispozici imutabilitu, statické typování tak mám tendenci to stavět jako kompozici funkcí. (Pokud ne, tak taky, ale protože jsem už ovlivněnej.) Opírám se o to, že mi sem přijde typ Person. Zatímco když nemám typy, tak počítám s tím, že mi sem přijde struktura obsahující name, surname. S typem Person nemohu to co se strukturou.

Když mi přijde třída Renderable tak jí renderuju. Protože tak nějak uvažuju, že ty záruky se vztahují jen na Renderování. Zatímco když mám funkci render přijímající sturkturu, tak renderuju tu strukturu. A přirozeně i něco vypočítám navíc, něco si odložím, něco vytáhnu pokoutně...

Asi to nebude všechno, jen prvotní co mě napadlo.
Mně vždy přišlo, že pokud se použije typová inference, tak se zdrojový kód staticky typovaný neliší od dynamicky typovaného. Některé jazyky to neumožňují u všech deklarací, ale teoreticky to jde a třeba v C++ už jde psát bez explicitních typů (s plnou kontrolou při překladu).

qelurg

  • ****
  • 372
    • Zobrazit profil
    • E-mail
Re:Zkušenosti s TypeScriptem
« Odpověď #12 kdy: 26. 03. 2020, 00:05:12 »
Dobrou. Cini to z JS pouzitelny jazyk.
Naprostý souhlas. Ja preferuji silněji typovaná prostředí - chyby jsou nalezeny již v době kompilace a také bych řekl, že to programátora nutí k lepšímu designu (na vkusu každého).

Silné typy nevadí, ty má i Python, ale statické typy jsou svěrací kazajka.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Zkušenosti s TypeScriptem
« Odpověď #13 kdy: 26. 03. 2020, 01:34:23 »
Mně vždy přišlo, že pokud se použije typová inference, tak se zdrojový kód staticky typovaný neliší od dynamicky typovaného. Některé jazyky to neumožňují u všech deklarací, ale teoreticky to jde a třeba v C++ už jde psát bez explicitních typů (s plnou kontrolou při překladu).

Může být.

Když si vybavím kód v Javascriptu, Pythonu - tak vidím jiný druh práce s kódem, než třeba v Haskellu. Haskell sice má typovou inferenci, takže je ukecanej stejně málo jako Python, ale ty typy tam cítíš. Opíráš se o ně. Stavíš na nich. To mi v Pythonu nebo Javascriptu nepřijde. Tam typy, respektive třídy používáš jako konstrukční nástroje, kdy dědíš (a mixuješ) do bezvědomí.

Další věc je, ale to už je dost specialita statického typování - tak u Haskellu máš "buď a nebo". Ten kód je takovej jakože ultimátní. Když do toho pustíš data, tak ti to buď správně sežere, nebo ti to vyhodí chybu. U Pythonu je to větší sázka do loterie.  Ale to je asi známá věc.

PS:
Mluvím o kódu, se kterým přicházím do styku. Samozřejmě pak ještě záleží na rukou.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Zkušenosti s TypeScriptem
« Odpověď #14 kdy: 26. 03. 2020, 01:50:04 »
Mně vždy přišlo, že pokud se použije typová inference, tak se zdrojový kód staticky typovaný neliší od dynamicky typovaného. Některé jazyky to neumožňují u všech deklarací, ale teoreticky to jde a třeba v C++ už jde psát bez explicitních typů (s plnou kontrolou při překladu).

Může být.

Když si vybavím kód v Javascriptu, Pythonu - tak vidím jiný druh práce s kódem, než třeba v Haskellu. Haskell sice má typovou inferenci, takže je ukecanej stejně málo jako Python, ale ty typy tam cítíš. Opíráš se o ně. Stavíš na nich. To mi v Pythonu nebo Javascriptu nepřijde. Tam typy, respektive třídy používáš jako konstrukční nástroje, kdy dědíš (a mixuješ) do bezvědomí.

Další věc je, ale to už je dost specialita statického typování - tak u Haskellu máš "buď a nebo". Ten kód je takovej jakože ultimátní. Když do toho pustíš data, tak ti to buď správně sežere, nebo ti to vyhodí chybu. U Pythonu je to větší sázka do loterie.  Ale to je asi známá věc.

PS:
Mluvím o kódu, se kterým přicházím do styku. Samozřejmě pak ještě záleží na rukou.
To je spíše tím, kdo ten kód píše. Akademik válící Haskell levou zadní píše i v Pythonu jinak, jako když ránu zašívá chirurg vs holič. Většinou to je fuk, ale rozdíl to je, no.