function naDruhu (num) {
return num * num
}
Táto funkcia si vôbec nestráži typ a pokiaľ ju niekto zavolá so zle zadaným parametrom z formulára, napríklad v tvare naDruhu('Jožo'), funkcia dá nečakaný výsledok. Použijem teda akože TS a nadefinujem typ:
function naDruhu (num: number) {
return num * num
}
Nedal som do kódu žiadnu kontrolu, pretypovanie, či parsovanie parametru. Lebo veď som nadefinoval typ parametru a spolieham naň. Že to nie je presný syntax TS nie je dôležité. Dôležité je, na čo sa pýtam, že čo sa udeje pri transpilácii. Lebo pokiaľ sa po transpilácii vyššie uvedená funkcia s typmi jednoducho transpiluje do čistého JS tak, že sa len odstránia definície typov, čiže naspäť do pôvodného tvaru,
function naDruhu (num) {
return num * num
}
tak mi je TS a celé typy na kokot, akurát tak mám hinty počas písania a kontrolu počas transpilácie, ktorá však nič zlé nezistí, lebo nevie dopredu, či mi užívateľ zadá vo formulári platné číslo. Keby však robila to, čo chcem vedieť či naozaj robí, či definícia typu zároveň zabezpečí, že pri transpilácii sa môj kód rozšíri o kontrolu typu, aby fungoval aj počas behu aplikácie, takže napríklad takto:
// moja definícia
function (num: number) {
return num * num
}
// po transpilácii napríklad takto,
// ako tu písal iný, s parseInt
function (num) {
if (!parseInt(num)) throw new Error()
return num * num
}
Už to tu zaznělo. Místo držkování čítaj.
1. Takto se to nepřeloží, protože TS je staticky typovanej.
2. Typy jsou transitivní, takže by si měl ohlídat, že uvedenou funkci zavolám s výrazem odpovídajícího typu.
3. TS neohlídá všechno (pokud mi něco neuniklo), takže pokud mu něco "vnutíš" tak slítne. Ale obvykle máš vstupy otypovaný, tudíž víš, že ten formulář ti vrátí string, a tak tě to přinutí k tomu ho přetypovat na int. Při normální práci ti to nespadne.