Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Mlocik97 12. 11. 2025, 00:12:47

Název: JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Mlocik97 12. 11. 2025, 00:12:47
Toto je reakcia na komentáre v článku https://www.root.cz/zpravicky/typescript-sa-na-githube-stal-programovacim-jazykom-cislo-jedna/nazory/ a keďže komunikácia je tam veľmi pomalá, a efektívnejšie je to prebrať do detailov tu na fóru, a získať pohľad viacej ľudí, myslím že je fajn tu začať túto "subjektívnu sebatu".

Osobne tvrdím že JS a TS je prakticky zhodný programovací jazyk až na jednu jedinú výnimku a to je syntax typovej anotácie (inline vs JSDoc, čo sú veľmi minimálne rozdiely. Ak by som ale mal brať že JS a TS je rozdielny jazyk (moje prirovnanie s "vymením podušku v Škoda Octavia a predám to ako moju vlastnú značku) dosť platí, pretože tie rozdiely sú obdobné ako v C prekladanom cez GCC vs Clang (aj tam sú konštrukty, ktoré chápe len jeden nástroj).

Navyše interoperability medzi JS a TS je tak obrovská, že vlastne všetky knižnice a frameworky fungujú v oboch bez akejkoľvek zmeny alebo "patchovania". Takže je logický assumption že je to stejný jazyk ak ekosystém je zhodný, nástroje sú zhodné (TSC rozumie JS a aj typovým anotáciám v ňom), atď... viď https://github.com/Mlocik97/JSvsTS/tree/master/src môj example.

Ak by sme teda ale tvrdili že jazyk neurčuje tool ktorý ho spracuváva (pretože predsa GCC a Clang nie sú 2 rozdielne jazyky "C"), tak potom definícia jazyku je skutočne len špecifikácia syntaxe a API a v takom prípade JS vs TS zas len platí moje "rozdiel je len v syntaxy typovej anotácie"... z pohľadu runtime sú obe jazyky zhodné, z pohľadu toolingu a typovej kontroli tiež, z pohľadu ekosystému zhruba tiež, a v podstate TSC je pre mňa "type-aware linter" (však keď si to tak dnes zoberem TSC ani nepotrebujem na spustenie TS, viď BunJS, Node, ESBuild...), a transformácie ktoré to robí pri "transpilácii" sú na úrovni transformácií ktoré robí ESLint, ESBuild, či Babel.

Taktiež argument že TS má typy ktoré JS nemá mi príde nesprávny, predsa typy sú o tom ako sa dáta ukladajú do pamäte, a to je teda aspekt runtime, ktorý je v oboch jazykoch rovnaký. Teda defacto sú to jeden a ten istý jazyk. Rozdiel je max v typových anotáciách, nie typoch samotných... a rozdiel v anotáciách je fakt len v pár syntaktických rozdieloch.

Čo si myslíte o tom vy? A ak toto číta echo_zulu, môže pokračovať tu, aj tak ten článok už dosť sa zahrabal hlboko v správičkách a taktiež debata tam je dosť meh keď sa pol dňa len čaká na schválenie jedného komentáru, a pri takejto diskusii by to trvalo večnosť to celé "vyjasniť".

Ďakujem všetkým vopred za vaše názory.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Martin Poljak 12. 11. 2025, 09:18:04
Typ dat je pouze konvence. Je pouze věcí konvence, zda třeba řada čísel v paměti je "jen" pole čísel s pevnou délkou nebo jde o řetězec s pevnou délkou. Takže ano, může mít typy, které JS nemá. Protože z hlediska jazyka jako takového ten typ je daný v podstatě jen tou deklarací. Anotancí. Konvencí.

A ano, je to samostatný jazyk. Jazyk právě těch typových deklarací. Má definovanou syntax, vyjadřovací prostředky, scope. Nic, čím by se lišil od ostatních domain-specific jazyků v něm není. A přesně v místě, kde se napojuje na JS tak tvoří univerzální jazyk spolu s ním. Ten je sice JS blízce příbuzný ale atokonto těžko může jít o tentýž jazyk.

Tolik prostá neformální logika.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: jano6 12. 11. 2025, 10:55:15
Sú to podľa mňa jednoznačne dva rozdielne jazyky. Ak sa naučíte JS, neznamená, že budete ovládať TS. Ten typový systém je dosť komplikovaný.

Ak sa budete hlásiť na job, kde budú požiadavky veľmi dobrá znalosť TS, nepochodíte s tým, však ja viem JS, to je to isté...
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Ink 12. 11. 2025, 11:26:07
Pokud vím, tak JS není podmnožinou TS, jelikož se některé konstrukce interpretují jinak:

https://news.ycombinator.com/item?id=18942886#18944467

Stejně jako C není podmnožina C++, pokud se něco v posledních letech nezměnilo.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Mlocik97 12. 11. 2025, 13:46:42
Pokud vím, tak JS není podmnožinou TS, jelikož se některé konstrukce interpretují jinak:

https://news.ycombinator.com/item?id=18942886#18944467

Stejně jako C není podmnožina C++, pokud se něco v posledních letech nezměnilo.

Toto je taký rare-case, prakticky v dobe prettieru a ESlint neexistujúci, keďže by to nepotrebnú zátvorku odstránilo,... že neviem či toto je argument na potvrdenie rozdielu medzi jazykmi i keď súhlasím nad týmto špecifickým rare-case som ani neuvažoval že jedna syntax môže znamenať 2 rozdielne veci v JS a TS. I tak tie rozdiely sú minimálne.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Mlocik97 12. 11. 2025, 13:48:49
Sú to podľa mňa jednoznačne dva rozdielne jazyky. Ak sa naučíte JS, neznamená, že budete ovládať TS. Ten typový systém je dosť komplikovaný.

Ak sa budete hlásiť na job, kde budú požiadavky veľmi dobrá znalosť TS, nepochodíte s tým, však ja viem JS, to je to isté...

Lenže ten typový systém mám aj v JS, len ho treba povoliť v jsconfig.json, stejne ako u TS v tsconfig.json. Bez nich to nemá efekt. S nimi to má efekt v oboch jazykoch. Rozdiel tu teda nie je.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Mlocik97 12. 11. 2025, 13:57:43
Typ dat je pouze konvence. Je pouze věcí konvence, zda třeba řada čísel v paměti je "jen" pole čísel s pevnou délkou nebo jde o řetězec s pevnou délkou. Takže ano, může mít typy, které JS nemá. Protože z hlediska jazyka jako takového ten typ je daný v podstatě jen tou deklarací. Anotancí. Konvencí.

A ano, je to samostatný jazyk. Jazyk právě těch typových deklarací. Má definovanou syntax, vyjadřovací prostředky, scope. Nic, čím by se lišil od ostatních domain-specific jazyků v něm není. A přesně v místě, kde se napojuje na JS tak tvoří univerzální jazyk spolu s ním. Ten je sice JS blízce příbuzný ale atokonto těžko může jít o tentýž jazyk.

Tolik prostá neformální logika.

Zaujímavý pohľad, asi z tohoto pohľadu máte pravdu, i keď ja skôr chápem jazyk ako špecifikáciu syntaxe a API. Tie typové anotácie majú rozdielnu syntax ako @type vs :, teda JSDoc vs inline, ale už popis typu samotného, nie len "oddelovač syntaxu logika vs typová anotácia", je taktiež zhodná, v podstate v @type {X} za X môžem napísať ľubovoľný TypeScript výraz resp. definíciu typu. Kľudne aj <T extends boolean>(val: T) => T extends true ? A : B a je to v JS valídne (keďže je to v podstate komentár, ale má efekt na tooly). Je to podobné ako dokumentačná syntax v C# napríklad.

takže síce syntax "oddelovača" je iná, v podstate syntax sugar, tak stále neviem prečo by sa JS a TS brali ako samostatné jazyky... lebo môžeme argumentovať že __builtin__* medzi CLang a GCC sú tiež rozdiely. Koľko % rozdielov definuje kedy to môžeme považovať za iný jazyk je už asi subjektívne.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Mlocik97 12. 11. 2025, 14:05:27
Percentuálny rozdiel v syntaxy a API medzi JS a TS vidím asi taký ako medzi JSON a JSON with comments (JSONC). A tiež by som povedal že je to stejný formát prakticky.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Mlocik97 12. 11. 2025, 14:24:18
Ak sa budete hlásiť na job, kde budú požiadavky veľmi dobrá znalosť TS, nepochodíte s tým, však ja viem JS, to je to isté...

Tak to potom JavaScript vývojári taktiež nie sú JavaScript vývojári ak nevedia proxy objekty, generátory a symboly. Chápem čo sa snažíte povedať, bežne na ponukách pracovných pozícií sa JS a TS berú ako 2 jazyky, ale aj v obchodoch sa berie že paradajka je zelenina, no ja asi pozerám z botanického pohľadu kde je to ovocie.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Mlocik97 12. 11. 2025, 14:26:29
Zatiaľ sa asi len zhodnem že toto je skutočne subjektívny pohľad a vidím že každý má iný pohľad na jazyk a chápanie termínu "programovací jazyk" že čo to vlastne znamená.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Martin Poljak 12. 11. 2025, 16:01:41
Ak sa budete hlásiť na job, kde budú požiadavky veľmi dobrá znalosť TS, nepochodíte s tým, však ja viem JS, to je to isté...

Tak to potom JavaScript vývojári taktiež nie sú JavaScript vývojári ak nevedia proxy objekty, generátory a symboly.

Jsou. Ale i na tom přesně vidíte, že jde o dva jazyky. Když neznáte Proxy, generátory, symboly, můžete víceméně normálně vyvíjet protože jazyk znáte. Když neznáte TypeScript, jako JS vývojář nemůžete v TypeScriptu vyvíjet cokoliv víc, než co je zase jen JS. Protože vám chybí znalost toho... oh, wait, jazyka.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Martin Poljak 12. 11. 2025, 16:08:20
Percentuálny rozdiel v syntaxy a API medzi JS a TS vidím asi taký ako medzi JSON a JSON with comments (JSONC). A tiež by som povedal že je to stejný formát prakticky.

Rozdíl v syntaxi mezi JS a TS je dost výrazný. Je to odlišný jazyk syntakticky, má jiné lexémy, sémantiku a kompletně jiná je dokonce i doména. On je možná problém v tom, že jako "TypeScript" se označuje něco, co reálně je do sebe vrostlá směs TypeScriptu a JavaScriptu. Ta je určena pro stejnou doménu jako JS. Ale to "typescriptové v TypeScriptu" je něco, co je podstatně odlišné. (A je to, mimochodem, přesně to, co odstraní transpiler -- třeba Babel -- když vyrábí JS z TS bez typecheckingu jen tím, že z kódu ten TS stripne.)
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: registrovany123 12. 11. 2025, 19:36:28
Když už se řeší JS a TS, tak já teda TS doteď nepoužíval, a ani to do budoucna neplánuju. Doménový model a datové typy mi docela dobře podrží backend, který v práci dělávám v Javě, případně teď používám Express a tam to do určité míry zase zvládne databáze, aspoň trochu.

Co bych ale u JS uvítal je lepší podpora v IntelliJ pro to, aby mi fungovaly hierarchie find usages v IntelliJ, a rovněž refaktoring funkcí. Ten funguje jenom, když použiju tento zápis pro tvorbu třídy:

Kód: [Vybrat]

export default StringUtil = {
  neco: funcition () {

  }
}


Ale protože výše uvedený moc nemusím, používám tento:

Kód: [Vybrat]

function neco () {
}

const StringUtil = {
  neco
}

export default StringUtil;

Jenže v něm nefunguje úplně 100% refaktoring jmen funkcí v IntelliJ. To by mi hodně pomohlo, kdyby to tam zprovoznili. Možná kdybych přešel na používání "class" a statických funkcí, ale to jsem doposud neudělal.

Další věc, co mi vadí na JS, tak je, že nemůžu kvůli undefined psát níže uvedené, protože mi to podruhuje linter:

Kód: [Vybrat]
if( pom !== null )
...

A proto musím používat toto:

Kód: [Vybrat]
if(!_.isNil(pom))
...


Což mi nepřijde takové přehledné. Světe div se, výše uvedené jsou hlavní věci, kterýma mě v praxi v provozu prudí javascript jako jazyk. Jinak mi přijde lepší a přehlednější, než je třeba Python, a to zejména pro vývoj webu.

Potom ještě mi vadí jedna taková věc při vývojí rest api, a to je, že musím ručně parsovat dat. typy v search parametrech url. Tady bych nejvíce ze všeho uvítal, kdybych měl typescript a něco mi automaticky namapovalo parametr na konkrétní datový typ, jako to umí Spring.
Název: Re:JavaScript vs. TypeScript: rovnaký alebo rozdielny jazyk?
Přispěvatel: Martin Poljak 12. 11. 2025, 20:20:34
Další věc, co mi vadí na JS, tak je, že nemůžu kvůli undefined psát níže uvedené, protože mi to podruhuje linter:

Kód: [Vybrat]
if( pom !== null )
...

A proto musím používat toto:

Kód: [Vybrat]
if(!_.isNil(pom))
...


Sice jsme trochu off-topic, ale v nativním JS lze použít ještě třeba taky:
Kód: [Vybrat]
if((pom ?? null) !== null)

Ne, že by to teda bylo o moc přehlednější ale různí soudruzi mají různý vkus.