TypeScript

MVOP3 WBI

Bc. Matěj Cajthaml ©

Smíchovská střední průmyslová
škola a gymnázium

icon

TypeScript

TypeScript

  • superset JavaScriptu
  • přidává statické typování
  • používá se pro větší projekty
  • kompiluje se do JS

Při správném použití

zaručuje:

  • lepší čitelnost kódu
  • menší chybovost
  • lepší refaktorovatelnost
  • lepší spolupráci

A při špatném: možnou komplikovanost a zpomalení vývoje.

Instalace a použití

Instalace a použití

  • ke spuštění TS je nutné zkompilovat do JS
  • kompilátory různé, např. tsc

Vytvoření Node.js projektu

npm init -y
npm install typescript --save-dev
npx tsc --init
npx tsc

Soubor tsconfig.json

  • konfigurace kompilace
  • měníme často:
    • výstupní adresář
    • moduly
    • target
    • typy

Pokud nic nenastavíme, kompiluje se vše ve složce, vždy do souboru se stejným názvem, ale s příponou .js.

Vývojový mód

  • nechceme kompilovat ručně → tsc -w
  • spouštění automaticky → nodemon

Dokumentace & cheat sheet

https://www.typescriptlang.org/cheatsheets/

https://www.typescriptlang.org/docs/

Typování

Typování

  • typ je způsob určení dat, které budou proměnné obsahovat
  • nejedná se nutně o datové typy, může jít i o reference a rozhraní
  • určujeme:
    • typ proměnné
    • typ parametrů funkce
    • návratový typ funkce
    • a mnoho dalšího

Ukázka typování

Co se stane, když typ neurčíme?

Implicitní typování

  • pokud typ neurčíme, TypeScript se pokusí určit typ sám
  • pokud se mu to nepodaří, použije any
    • určuje cokoliv, můžeme s tím dělat cokoliv, způsobuje však chyby
  • tohle je možné právě díky typování z jiných míst projektu!

Elementární typy

  • string
  • number
  • boolean
  • null
  • undefined
  • void
  • never

Nepovinný typ

  • používáme ?
  • reálně to řekne, že hodnota může být undefined

Rozdíl?

Typ pole

  • skládá se z:
    • typ prvků
    • označení pole — []
  • např. string[] určuje pole řetězců

Typ funkce

  • kostra funkce
  • parametry a návratový typ
  • např. (a: number, b: number) => number

Typ třídy

  • definice jako v JS
  • vlastnostem určujeme typy
  • např. class Person { name: string; }
  • metody jsou stejné jako ostatní části TS
  • velmi mnoho dalších OOP věcí, např. viditelnost

Variabilní typy

  • pokud chceme, aby proměnná mohla mít více typů, použijeme |
  • např. string | number
  • je to typ, znovu lze použít kdekoliv, např. v polích

Přetypování

  • pokud chceme proměnnou přetypovat, použijeme as
  • např. let a = '5' as number
  • pokud se nepodaří, TypeScript vyhodí chybu
  • problémy se strukturou a pouze compile-time

Kontrola typů

  • pokud chceme zkontrolovat typ proměnné, použijeme typeof
  • např. if (typeof a === 'string') { ... }
  • poté můžeme přetypovat
  • častá kontrola ještě pomocí instanceof

Pokročilé typy

Ukládání typů

  • pokud chceme typ použít vícekrát, uložíme ho do proměnné
  • např. type MyType = string | number
  • použití jako běžný typ
  • lze exportovat, stejně jako v JS

Rozhraní

  • definice struktury objektu
  • použití jako typ
  • jednoduché dědění a rozšiřování
  • např. interface Person { name: string; age: number; }
  • a použití: let p: Person = { name: 'John', age: 25 }

Výčet

  • definice konstantních hodnot
  • použití jako typ
  • např. enum Color { Red, Green, Blue }
  • a použití: let c: Color = Color.Green
  • kompilace do objektu

Modifikace typů

  • Omit<T, K> — vynechání klíče K z typu T
  • Partial<T> — všechny klíče z T jsou volitelné (možné undefined)
  • Record<K, T> — vytvoření objektu s klíči K a hodnotami T
  • ...a mnoho dalších

Generika

Generika

  • použití typů jako parametrů
  • při vytváření třídy nebo funkce, řekneme:
    • které typy budou použity jako parametry
    • označíme je názvem (např. T, U, ...)
    • dané názvy pak používáme
  • při použití určíme daný konkétní typ

Podmínky

  • pokud chceme, aby typ byl specifický, použijeme podmínky
  • např. T extends string

Použití

Soubory .d.ts

Práce

Zjistěte, co jsou soubory .d.ts a k čemu slouží.

Děkuji za pozornost!

  • matej.cajthaml@ssps.cz
  • https://ssps.cajthaml.eu/