Agenda
• Jak rozpocząłemprzygodę z TS
• Wprowadzenie do TS
• Typy proste, Szablony
• Klasy, Interfejsy, Dziedziczenie
• Typings/DefinitelyTyped
• Przykłady użycia
• Za i przeciw
• Inne projekty
• QA
3.
Dwa słowa omnie
Ukrywa się jako PolishDeveloper
Programista od 9 lat
Przed snem zamiast dobranocki czytam
CleanCode
Rajdy to moja pasja
Gdy nikt nie patrzy gram w Minecrafta
Kolejny język ?!
Powolne przejście na Front-end
Kod JS robi się coraz większy
Kod JS robi się coraz bardziej
skomplikowany
OO jest popularne, ES6 też to ma
Prototypowanie jest jak battle-axe
Ale przecież jest już ES6
11.
TS - czymjesteś
Strict superset of Javascript
Pierwsza wersja 2012
Jednym z autorów jest Anders Hejlsberg
Transpilator
Typy,Szablony,Klasy,Moduły,Interfejsy o/
Funkcje
function triggerError(message:string):void {
alert('Error' + message);
}
function add(a:number, b:number):number {
return a+b;
}
//Error:(20, 20) TS2345: Argument of type 'string' is not assignable
to parameter of type 'number'.
function double(value:number) {
return value*2;
}
Klasy cdn…
class Animal{
constructor(protected name: string) {}
}
class Rhino extends Animal {
constructor() {
super("Rhino");
}
}
class Employee {
constructor(private firstName: string) {}
}
let animal:Animal = new Animal("Kiwi");
let rhino = new Rhino();
let employee = new Employee("Bob");
20.
Klasy cdn 2
letanimal:Animal = new Animal("Kiwi");
let rhino = new Rhino();
let employee = new Employee("Bob");
animal = rhino;
animal = employee;
//main.ts(40,1): error TS2322: Type 'Employee' is not assignable
to type 'Animal'.
Czemu nie ES6
Wciążdynamicznie typowany..
Brak supportu dla nowych przeglądarek(Babel ?)
ES5 – Grudzień 2009
ES6 – Czerwiec 2015
ES7 - WIP
TS1.4 – Styczeń 2014
TS1.5 – Lipiec 2015
TS1.6 – Wrzesień 2015
TS1.7 - Grudzień 2015
TS1.8 - Luty 2016
28.
Za i przeciw
Działa wszędzie
Statyczne typowanie
Programowanie defensywne
Podejście OO
Łatwiejsze UnitTesty
Podpowiadanie składni
Learning curve
Dodatkowy proces kompilacji
Wymaga bindigów które nie zawsze są
#11 Pełny cross-platform
Duże projekt staja się projektami read only bo każdy boi sie ich dotknać (nie mozna refaktorowac, jedynie grep)
Można kontrolować swój komputer, swoje otoczenie, ale nie można kontrolować komputera Twoich klientów/userów
#12 lead architect of C# and creator of Delphi and TurboPascal
typowanie per obiekt (np ta klasa ma tylko 3 metody, to sa metody ktorych mozesz uzyc, a nie pokazuje wszysktie metody wszedzie dostepne) a co za tym idzie, możesz typować, albo nie, tak jak chcesz
pozwala używać funkcjonalności z przyszłości juz teraz
kiedy nie jest typowane TS probuje sam odgadnąć typy, samo doanie typu do parametry dla sortByName(a:any[]) powoduje ze on juz rozkmini co i jak
lepsza refaktoryzacja, podpowie tylko uzycie danej klasy, a nie wszystkie uzycia w kodzie (poniewaz js jest dynamiczny i ciezko jest odnalezc gdzie faktycznie jest uzywany dany property)