E-book details

TypeScript na warsztacie. Praktyczny przewodnik pisania  efektywnego kodu

TypeScript na warsztacie. Praktyczny przewodnik pisania efektywnego kodu

Ben Grynhaus, Jordan Hudgens, Rayon Hunte, Matt Morgan, Wekoslav Stefanovski

Ebook

TypeScript szybko stał się ulubionym językiem programowania zawodowców. Pozwala na tworzenie czystego, efektywnego i łatwego w utrzymaniu kodu, a także zastosowanie zaawansowanych konstrukcji programistycznych. Co więcej, pracę w tym języku uprzyjemniają liczne frameworki i biblioteki, które pozwalają na sprawną budowę dojrzałych aplikacji. Jednak z punktu widzenia początkującego programisty TypeScript ma inną ogromną zaletę: jest świetnym punktem startu dla każdego, kto chce pisać czytelny, łatwy do zrozumienia i mniej podatny na błędy kod.

Dzięki tej książce Twoja nauka programowania w TypeScripcie przebiegnie w maksymalnie sprawny i efektywny sposób. Położono w niej nacisk na praktykę, a objaśnienia teoretyczne ograniczono do faktycznie ważnych i przydatnych zagadnień, które ułatwią ugruntowanie najlepszych podstaw programowania. W licznych ćwiczeniach pokazano, jak stosować kluczowe koncepcje w aplikacjach produkcyjnych, używanych w rzeczywistości. Każdy rozdział kończy się zadaniem do samodzielnego wykonania, opracowanym tak, by umożliwić wypróbowanie poznanych treści w praktyce. Jeśli chcesz pisać kod w TypeScripcie na profesjonalnym poziomie, a równocześnie odczuwasz onieśmielenie na myśl o nauce nowego języka, dzięki temu podręcznikowi szybko osiągniesz swój cel!

W książce między innymi:

  • gruntowne podstawy języka TypeScript i pliki deklaracji
  • funkcje, klasy i obiekty w TypeScripcie
  • wstrzykiwanie zależności i zachowania asynchroniczne
  • obietnice i programowanie asynchroniczne
  • biblioteka React i jej zastosowanie

TypeScript: sprawdź, czy umiesz napisać lepszy kod!

Wstęp

Rozdział 1. Podstawy TypeScriptu

  • Wprowadzenie
    • Ewolucja TypeScriptu
    • Cele projektowe TypeScriptu
  • Pierwsze kroki z TypeScriptem
    • Kompilator TypeScriptu
    • Konfigurowanie projektu TypeScriptu
    • Ćwiczenie 1.01. Użycie pliku tsconfig.json i pierwsze kroki z TypeScriptem
    • Typy i ich zastosowanie
  • TypeScript i funkcje
    • Ćwiczenie 1.02. Praca z funkcjami w TypeScripcie
  • TypeScript i obiekty
    • Ćwiczenie 1.03. Praca z obiektami
  • Typy proste
    • Ćwiczenie 1.04. Operator typeof
    • Łańcuchy znaków
    • Liczby
    • Typy logiczne (boolowskie)
    • Tablice
    • Krotki
    • Ćwiczenie 1.05. Stosowanie tablic i krotek do wydajnego sortowania obiektów
    • Typy wyliczeniowe
    • Typy any i unknown
    • Wartości null i undefined
    • Typ never
    • Typy funkcji
  • Tworzenie własnych typów
    • Ćwiczenie 1.06. Tworzenie funkcji kalkulatora
    • Zadanie 1.01. Tworzenie biblioteki do pracy z łańcuchami znaków
  • Podsumowanie

Rozdział 2. Pliki deklaracji

  • Wprowadzenie
  • Pliki deklaracji
    • Ćwiczenie 2.01. Tworzenie pliku deklaracji od podstaw
    • Wyjątki
  • Zewnętrzne biblioteki kodów
    • Biblioteka DefinitelyTyped
    • Analiza zewnętrznego pliku deklaracji
    • Ćwiczenie 2.02. Tworzenie typów z wykorzystaniem zewnętrznych bibliotek
    • Programistyczny przepływ pracy dla DefinitelyTyped
    • Ćwiczenie 2.03. Tworzenie aplikacji baseballowej karty składu
    • Zadanie 2.01. Tworzenie pliku deklaracji mapy cieplnej
  • Podsumowanie

Rozdział 3. Funkcje

  • Wprowadzenie
  • Funkcje w TypeScripcie
    • Ćwiczenie 3.01. Pierwsze kroki z funkcjami w TypeScripcie
    • Słowo kluczowe function
    • Parametry funkcji
    • Argument a parametr
    • Parametry opcjonalne
    • Parametry domyślne
    • Wiele argumentów
    • Parametry reszty
    • Destrukturyzacja typów zwracanych
    • Konstruktor funkcji
    • Ćwiczenie 3.02. Porównywanie tablic liczb
  • Wyrażenia funkcyjne
  • Funkcje strzałkowe
  • Inferencja typów
    • Ćwiczenie 3.03. Pisanie funkcji strzałkowych
    • Słowo kluczowe this
    • Ćwiczenie 3.04. Stosowanie this w obiekcie
    • Domknięcia i zakres
    • Ćwiczenie 3.05. Tworzenie metody wytwórczej zamówień z wykorzystaniem domknięć
    • Rozwijanie funkcji
    • Ćwiczenie 3.06. Refaktoryzacja do postaci funkcji rozwijanych
  • Programowanie funkcyjne
  • Organizowanie funkcji w obiekty i klasy
    • Ćwiczenie 3.07. Refaktoryzacja kodu JavaScript do TypeScriptu
  • Słowa kluczowe import, export i require
    • Ćwiczenie 3.08. Importowanie i eksportowanie
    • Zadanie 3.01. Budowanie systemu rezerwacji lotów z wykorzystaniem funkcji
  • Wykonywanie testów jednostkowych za pomocą ts-jest
    • Zadanie 3.02. Pisanie testów jednostkowych
  • Obsługa błędów
  • Podsumowanie

Rozdział 4. Klasy i obiekty

  • Wprowadzenie
  • Czym są klasy i obiekty?
    • Ćwiczenie 4.01. Budowanie pierwszej klasy
    • Rozszerzanie zachowania klasy za pomocą konstruktora
    • Słowo kluczowe this
    • Ćwiczenie 4.02. Definiowanie atrybutów klasy i uzyskiwanie do nich dostępu
    • Ćwiczenie 4.03. Integrowanie typów z klasami
  • Interfejsy TypeScriptu
    • Ćwiczenie 4.04. Budowanie interfejsu
  • Generowanie kodu HTML w metodach
    • Ćwiczenie 4.05. Generowanie i przeglądanie kodu HTML
    • Praca z wieloma klasami i obiektami
    • Ćwiczenie 4.06. Łączenie klas
    • Zadanie 4.01. Tworzenie modelu użytkownika za pomocą klas, obiektów i interfejsów
  • Podsumowanie

Rozdział 5. Interfejsy i dziedziczenie

  • Wprowadzenie
  • Interfejsy
    • Studium przypadku: pisanie pierwszego interfejsu
    • Ćwiczenie 5.01. Implementacja interfejsów
    • Ćwiczenie 5.02. Implementacja interfejsów - tworzenie prototypowej aplikacji blogowej
    • Ćwiczenie 5.03. Tworzenie interfejsów dla funkcji aktualizacji bazy danych użytkownika
    • Zadanie 5.01. Budowanie komponentu zarządzania użytkownikami za pomocą interfejsów
  • Dziedziczenie w TypeScripcie
    • Ćwiczenie 5.04. Tworzenie klasy bazowej i dwóch rozszerzonych klas potomnych
    • Ćwiczenie 5.05. Tworzenie klas bazowych i rozszerzonych przy użyciu dziedziczenia wielopoziomowego
    • Zadanie 5.02. Tworzenie prototypowej aplikacji internetowej dla salonu samochodowego przy użyciu dziedziczenia
  • Podsumowanie

Rozdział 6. Typy zaawansowane

  • Wprowadzenie
  • Aliasy typów
    • Ćwiczenie 6.01. Implementowanie aliasów typów
  • Literały typów
    • Ćwiczenie 6.02. Literały typów
  • Typy części wspólnej
    • Ćwiczenie 6.03. Tworzenie typów części wspólnej
  • Typy unii
    • Ćwiczenie 6.04. Aktualizowanie zapasów produktów za pomocą interfejsu API
  • Typy indeksowe
    • Ćwiczenie 6.05. Wyświetlanie komunikatów o błędach
    • Zadanie 6.01. Typ części wspólnej
    • Zadanie 6.02. Typ unii
    • Zadanie 6.03. Typ indeksowy
  • Podsumowanie

Rozdział 7. Dekoratory

  • Wprowadzenie
  • Refleksja
    • Konfigurowanie opcji kompilatora
  • Znaczenie dekoratorów
    • Problem zagadnień przekrojowych
  • Dekoratory i metody wytwórcze dekoratorów
    • Składnia dekoratorów
    • Metody wytwórcze dekoratorów
  • Dekoratory klas
    • Wstrzykiwanie właściwości
    • Ćwiczenie 7.01. Tworzenie prostej metody wytwórczej dekoratora klas
    • Rozszerzenie konstruktora
    • Ćwiczenie 7.02. Użycie dekoratora rozszerzeń konstruktora
    • Opakowywanie konstruktora
    • Ćwiczenie 7.03. Tworzenie dekoratora rejestrowania dla klasy
  • Dekoratory metod i akcesorów
    • Dekoratory funkcji instancji
    • Ćwiczenie 7.04. Tworzenie dekoratora, który oznacza funkcję jako wyliczalną
    • Dekoratory funkcji statycznych
    • Dekoratory opakowywania metod
    • Ćwiczenie 7.05. Tworzenie dekoratora rejestrowania dla metody
    • Zadanie 7.01. Tworzenie dekoratorów do liczenia wywołań
  • Stosowanie metadanych w dekoratorach
    • Obiekt Reflect
    • Ćwiczenie 7.06. Dodawanie metadanych do metod za pomocą dekoratorów
  • Dekoratory właściwości
    • Ćwiczenie 7.07. Tworzenie i stosowanie dekoratora właściwości
  • Dekoratory parametrów
    • Ćwiczenie 7.08. Tworzenie i stosowanie dekoratora parametrów
  • Zastosowanie wielu dekoratorów do pojedynczego elementu docelowego
    • Zadanie 7.02. Stosowanie dekoratorów w celu dodania zagadnień przekrojowych
  • Podsumowanie

Rozdział 8. Wstrzykiwanie zależności w TypeScripcie

  • Wprowadzenie
  • Wzorzec projektowy DI
    • DI we frameworku Angular
    • Ćwiczenie 8.01. Dodawanie przechwytywacza HttpInterceptor do aplikacji Angulara
    • DI we frameworku Nest.js
  • Biblioteka InversifyJS
    • Ćwiczenie 8.02. Tworzenie aplikacji "Witaj, świecie" z wykorzystaniem InversifyJS
    • Zadanie 8.01. Kalkulator oparty na DI
  • Podsumowanie

Rozdział 9. Typy sparametryzowane i warunkowe

  • Wprowadzenie
  • Typy sparametryzowane
    • Interfejsy sparametryzowane
    • Typy sparametryzowane
    • Klasy sparametryzowane
    • Ćwiczenie 9.01. Klasa sparametryzowana Set
    • Funkcje sparametryzowane
    • Ograniczenia typów sparametryzowanych
    • Ćwiczenie 9.02. Funkcja sparametryzowana memoize
    • Wartości domyślne typów sparametryzowanych
  • Typy warunkowe
    • Zadanie 9.01. Tworzenie typu DeepPartial<T>
  • Podsumowanie

Rozdział 10. Pętle zdarzeń i zachowania asynchroniczne

  • Wprowadzenie
  • Podejście wielowątkowe
    • Wykonywanie asynchroniczne
  • Wykonywanie kodu JavaScript
    • Ćwiczenie 10.01. Układanie funkcji w stos
  • Przeglądarki i JavaScript
    • Zdarzenia w przeglądarce
  • Interfejsy API środowiska
    • Metoda setTimeout
    • Ćwiczenie 10.02. Korzystanie z setTimeout
    • AJAX (asynchroniczny JavaScript i XML)
    • Zadanie 10.01. Przeglądarka filmów wykorzystująca obiekt xhr i wywołania zwrotne
  • Obietnice
    • Ćwiczenie 10.03. Liczenie do 5
    • Czym są obietnice?
    • Ćwiczenie 10.04. Liczenie do 5 za pomocą obietnic
    • Zadanie 10.02. Przeglądarka filmów wykorzystująca API fetch i obietnice
    • Funkcjonalność async/await
    • Ćwiczenie 10.05. Liczenie do 5 z wykorzystaniem async i await
    • Zadanie 10.03. Przeglądarka filmów wykorzystująca API fetch i funkcjonalność async/await
  • Podsumowanie

Rozdział 11. Funkcje wyższego rzędu i wywołania zwrotne

  • Wprowadzenie
    • Wprowadzenie do funkcji HOC - przykłady
  • Funkcje wyższego rzędu
    • Ćwiczenie 11.01. Stosowanie funkcji wyższego rzędu do organizowania filtrowania danych i operowania na nich
  • Wywołania zwrotne
  • Pętla zdarzeń
    • Wywołania zwrotne w Node.js
    • Piekło wywołań zwrotnych
    • Unikanie piekła wywołań zwrotnych
    • Wyodrębnienie procedur obsługi wywołań zwrotnych do deklaracji funkcji na poziomie pliku
    • Łączenie wywołań zwrotnych w łańcuch
    • Obietnice
    • Funkcjonalność async/await
    • Zadanie 11.01. Funkcja wyższego rzędu pipe
  • Podsumowanie

Rozdział 12. Przewodnik po obietnicach w TypeScripcie

  • Wprowadzenie
  • Ewolucja i powody wprowadzenia obietnic
  • Anatomia obietnic
    • Wywołanie zwrotne obietnicy
    • Metody then i catch
    • Stan pending
    • Stan fulfilled
    • Stan rejected
    • Łączenie w łańcuch
    • Ćwiczenie 12.01. Łączenie w łańcuch obietnic
    • Metoda finally
    • Metoda Promise.all
    • Ćwiczenie 12.02. Rekurencyjna metoda Promise.all
    • Metoda Promise.allSettled
    • Ćwiczenie 12.03. Promise.allSettled
    • Metoda Promise.any
    • Metoda Promise.race
  • Ulepszanie obietnic za pomocą typów
    • Ćwiczenie 12.04. Renderowanie asynchroniczne
  • Biblioteki i natywne obietnice - zewnętrzne biblioteki, Q i Bluebird
    • Wypełnienia obietnic
  • Promisyfikacja
    • Funkcjonalność util.promisify frameworku Node.js
  • Asynchroniczny system plików
    • Metoda fs.readFile
    • Metoda fs.readFileSync
    • API obietnic biblioteki fs
    • Ćwiczenie 12.05. API obietnic biblioteki fs
  • Praca z bazami danych
  • Programowanie z wykorzystaniem API RESTful
    • Ćwiczenie 12.06. Implementowanie API RESTful wspieranego przez sqlite
  • Połączenie wszystkich elementów w celu zbudowania aplikacji korzystającej z obietnic
    • Zadanie 12.01. Budowanie aplikacji korzystającej z obietnic
  • Podsumowanie

Rozdział 13. Funkcjonalność async/await w TypeScripcie

  • Wprowadzenie
  • Ewolucja i powody wprowadzenia async/await
  • Funkcjonalność async/await w TypeScripcie
    • Ćwiczenie 13.01. Środowiska docelowe transpilacji
    • Wybór środowiska docelowego
  • Składnia
    • Słowo kluczowe async
    • Ćwiczenie 13.02. Słowo kluczowe async
    • Ćwiczenie 13.03. Rozwiązywanie funkcji async za pomocą then
    • Słowo kluczowe await
    • Ćwiczenie 13.04. Słowo kluczowe await
    • Ćwiczenie 13.05. Oczekiwanie na obietnicę
    • Lukier składniowy
  • Obsługa wyjątków
    • Ćwiczenie 13.06. Obsługa wyjątków
  • Funkcjonalność await najwyższego poziomu
  • Metody obiektu Promise
    • Ćwiczenie 13.07. async/await we frameworku Express.js
    • Ćwiczenie 13.08. NestJS
    • Ćwiczenie 13.09. TypeORM
    • Zadanie 13.01. Użycie await do refaktoryzacji łańcucha obietnic
  • Podsumowanie

Rozdział 14. TypeScript i biblioteka React

  • Wprowadzenie
  • Typowanie Reacta
    • TypeScript w Reakcie
  • Witaj, Reakcie
  • Komponent
    • Komponenty stanowe
    • Komponenty bezstanowe
    • Komponenty czyste
    • Komponenty wyższego rzędu
  • JSX i TSX
    • Ćwiczenie 14.01. Ładowanie aplikacji za pomocą Create React APP
  • Routing
    • Ćwiczenie 14.02. React Router
  • Komponenty biblioteki React
    • Komponenty klasowe
    • Komponenty funkcyjne (deklaracja funkcji)
    • Komponenty funkcyjne (wyrażenie funkcyjne z funkcjami strzałkowymi)
    • Bez JSX-a
    • Stan w komponentach funkcyjnych
  • Zarządzanie stanem w bibliotece React
    • Ćwiczenie 14.03. Kontekst biblioteki React
  • Firebase
    • Ćwiczenie 14.04. Pierwsze kroki z platformą Firebase
  • Stylizacja aplikacji biblioteki React
    • Główny arkusz stylów
    • Style o zakresie komponentów
    • CSS-in-JS
    • Biblioteki komponentów
    • Zadanie 14.01. Blog
  • Podsumowanie

Dodatek

  • Title: TypeScript na warsztacie. Praktyczny przewodnik pisania efektywnego kodu
  • Author: Ben Grynhaus, Jordan Hudgens, Rayon Hunte, Matt Morgan, Wekoslav Stefanovski
  • Original title: The TypeScript Workshop: A practical guide to confident, effective TypeScript programming
  • Translation: Lech Lachowski
  • ISBN: 978-83-283-8952-6, 9788328389526
  • Date of issue: 2022-08-09
  • Format: Ebook
  • Item ID: typesc
  • Publisher: Helion