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.