Errata

Książka „TypeScript na poważnie”

Informacje o książce znajdziesz tutaj: https://typescriptnapowaznie.pl

Dołożyłem wszelkich starań, aby w niniejszej książce znalazły się wyłącznie informacje rzetelne i sprawdzone. Przetestowałem każdy fragment kodu i każdy przykład. Pomimo tego, może się tak zdarzyć, że gdzieś wkradły się błędy.
Jeśli znajdziesz jakiekolwiek pomyłki, to proszę, koniecznie mi to zgłoś! Możesz to zrobić poprzez tę stronę (w sekcji komentarzy). W przyszłości znajdziesz tu również wypisane poprawki, które do książki zostały wprowadzone już po premierze, aby łatwiej Ci było się z nimi zapoznać.

Subscribe
Powiadom o
guest
45 komentarzy
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Daniel
Daniel
3 miesięcy temu

Str. 48

Do niektórych rzeczy (np. async) jeszcze wrócimy w późniejszych rozdziałach. ?? Pozostałych punktów nie omawiałem tutaj, gdyż nie starczyłoby na wszystko miejsca

Tutaj ??, więc zakładam (może błędnie), że miały być tutaj podane w których rozdziałach, lub też nadmiarowe znaki zapytania?

Ta sama strona 48

Dociekliwe(-i) na pewno będą chciały(-eli) doczytać, żeby dowie- dzieć się jak najwięcej. A może już to zrobili? Tak, czy inaczej, oto lista polecanych przeze mnie zasobów, z których warto się uczyć:

@todo

Tutaj @todo, zakładam, że miały być materiały na potem, ale autor zapomniał dodać?

Piotr
Piotr
2 miesięcy temu

Cześć,

Wydaje mi się, że jest jakiś problem z epub – większość kodu nie jest renderowane pod Apple Books. Dałoby radę przegenerować plik?

Daniel
Daniel
3 miesięcy temu

Strona 32 w pdf, ostatnie zdanie przed podsumowaniem cytując:

W rozdziale ?? omówię poszczególne ustawienia oraz tak ważną rzecz, jak referencje do projektów. 

Zamiast ?? powinien być numer rozdziału.

Daniel
Daniel
3 miesięcy temu

Str. 49

Ponieważ jednak niektóre popularne biblioteki zdecydowały się na oparcie swojego działania o dekoratory (np. Angular), nie mogłem ich zupełnie pominąć. O tym, jak działają dekoratory w TS dowiesz się w rozdziale ?? 

Brak podania numeru rozdziału.

Mateusz
Mateusz
3 miesięcy temu

„robię zakłopotana mine I odpowiadam że *NIE* znam niczego konkretnego” zjadłeś „NIE

Screenshot_20200823-153011.jpg
Mateusz
Mateusz
3 miesięcy temu

Patrz screen

trackback

[…] do wersji drukowanej. Raz zleconego druku nie można już później poprawić, a errata online to fajny bonus, ale za mało, żeby pozwolić na wydruk z oczywistymi […]

Adam
Adam
2 miesięcy temu

ROZDZIAŁ 7.4.2
przykład:
const ex: Example = {
cannotUpdateMe: „abc”,
};
// 1
ex.optionalProperty = 123; // OK
1007.4 Interfejs
// 2
ex.cannotUpdateMe = „a”; // Błąd!

brakuje readonly przy connotUpdateMe oraz brakuje pola optionalProperty?.

Łukasz
Łukasz
2 miesięcy temu

Rozdział 1.5,

Gdyby statyczne i dynamiczne typowanie chcieć opisać dwoma innymi słowami, to za pewne byłyby to „pewność” i „niepewność”. 

W tym kontekście „za pewne” powinno być łącznie.

Łukasz
Łukasz
2 miesięcy temu

Kindle paperwhite 3 wypluł ?? zamiast numeru rozdziału tak jak na screenie.

Screenshot 2020-08-27 at 11.01.06.png
Łukasz
Łukasz
2 miesięcy temu

Kindle paperwhite 3 – ten snippet kodu jest przełamany do nowej linii w środku nazwy argumentu. Być może kwestia jakichś parametrów przy tworzeniu mobi – nie mam pojęcia, ale było by ciut czytelniejsze.

Screenshot 2020-08-27 at 11.06.01.png
Marcin
Marcin
2 miesięcy temu

4.2 Dynamiczne typowanie

Czy można pisać dobry kody używając

Powinno być „kod” – w liczbie mnogiej.
Mobi loc 1082

Marcin
Marcin
2 miesięcy temu
Typowy przykład słabego typowania w akcji:
 
const a = "3" - 1; // 1 
const a = "3" + 1; // '31' 

W pierwszym przykładzie od ciągu znaków ‘3’ próbujemy odjąć liczbę 1 . Wynikiem jest liczba 2.

//1 a powinno być //2
Wylogowałeś źle, ale poniżej wytłumaczone jest git.

4.4 słabe typowanie

Kuba
Kuba
2 miesięcy temu

Str. 119
Tutaj nie napisałem val: number , a mimo to TypeScript dokład-
nie „wiem”

chyba jednak TypEscript dokładnie „wie” 🙂

drillprops
drillprops
2 miesięcy temu

W sumie pierdoła.
Strona 57

const a = „3” – 1; // 1

Co prawda poniżej piszesz, że wynikiem jest 2, ale błąd pozostaje 😛

DominikaD
Dominika (@dommie73)
2 miesięcy temu

[3.6.1] W obu fragmentach kodu jest ta sama literówka:

const age = genearateAge(); // generateAge()
DominikaD
Dominika (@dommie73)
2 miesięcy temu

[4.4] Przykład słabego typowania:

const a = "3" - 1; // 1

W komentarzu powinna być liczba 2. Błąd znajduje się tylko w kodzie, opis podaje już prawidłowy wynik.

DominikaD
Dominika (@dommie73)
2 miesięcy temu

[6.5][9.5]

type Cb = (name: string, age: number) => bool;

Typem zwracanym powinien być boolean.

DominikaD
Dominika (@dommie73)
2 miesięcy temu

[6.9]

function getConfig(overrides) { 
  // [...]
  else if (typeof overrides === "string") { 
    return { ...DEFAULT_CONFIG, enc: config }; 
  } 
  // [...] 
} 

Zamiast config powinno być overrides. Ta sama funkcja pojawia się w 6.9.1, ale nie zawiera już tego błędu.

DominikaD
Dominika (@dommie73)
2 miesięcy temu

[7.5]

Wspominałem już o tym, że deklaracja klasy tworzy tak naprawdę dwa typy. Pierwszy z nich opisuje właśnie statyczne pola i funkcje, a drugi te, które znajdą się w instancjach danej klasy. W tym przypadku będą to, odpowiednio, User i typeof User (tak, to drugie to też nazwa typu!)

Z tego fragmentu wynika, że User opisuje statyczne pola i funkcje, a typeof User instancje klasy User. Tymczasem jest dokładnie odwrotnie 🙂

DominikaD
Dominika (@dommie73)
2 miesięcy temu

[10.4] W kodzie mamy dwie klasy: Player i Hero. Tekst odwołujący się do tego przykładu mówi jednak o klasach Player i Animal:

Jeśli pole prywatne name zdefiniowalibyśmy w klasie wyżej, a Player i Animal by po niej dziedziczyły, błędu by nie było.

Michał
Michał
2 miesięcy temu

Czytam epuba przez books na iOS 13.6.1 i nie ładują się przykłady kodu dla TS (JS są widoczne).

87BA828C-319B-46BE-BDBC-08437D6A8860.png
GanderD
Gander (@ganderpl)
2 miesięcy temu

PDF / Rozdział 6.9 Przeładowywanie funkcji
Drugi blok „if”:

const DEFAULT_CONFIG = {
    in: "./in.txt",
    out: "out.txt",
};

function getConfig(overrides) {
    if (typeof overrides === "object") {
        return {...DEFAULT_CONFIG, ...overrides};
    } else if (typeof overrides === "string") {
        return {...DEFAULT_CONFIG, enc: config};
    } else if (typeof overrides === "undefined") {
        return DEFAULT_CONFIG;
    } else {
        throw new Error("Invalid config provided!");
    }
}

chyba powinno być:

} else if (typeof overrides === "string") {
        return {...DEFAULT_CONFIG, enc: overrides};
}
GanderD
Gander (@ganderpl)
2 miesięcy temu

Powołując się na stosowanie dobrych praktyk programowania przykłady w rozdziałach 6.9 i 6.9.1 (oraz wszystkich o podobnym zapisie) powinny wyglądać w sposób następujący:

function getConfig(overrides) {
    if (typeof overrides === "object") {
        return {...DEFAULT_CONFIG, ...overrides};
    }
    
    if (typeof overrides === "string") {
        return {...DEFAULT_CONFIG, enc: overrides};
    }
    
    if (typeof overrides === "undefined") {
        return DEFAULT_CONFIG;
    }
    
    throw new Error("Invalid config provided!");
}

GanderD
Gander (@ganderpl)
2 miesięcy temu

PDF / Rozdział 4.4 Słabe typowanie
Jest:

const a = "3" - 1; // 1
const a = "3" + 1; // '31'

Powinno być:

const a = "3" - 1; // 2
const a = "3" + 1; // '31'
GanderD
Gander (@ganderpl)
2 miesięcy temu

[7.4.4]
Niemożliwe jest uruchomienie kodu z przykładu. IDE poprawił kod do poniższej postaci, i dopiero to działa:

interface Queue {
    push(val: string): void;


    pop(): string | undefined;
}


class ArrayQueue implements Queue {
    private array: Array<string> = [];


    push(val: string): void {
        this.array.push(val);
    }


    pop(): string | undefined {
        return this.array.pop();
    }
}

[8.4]
Kod po przeróbkach, który udało się uruchomić:

interface Queue<T> {
    push(val: T): void;


    pop(): T | undefined;
}


class ArrayQueue<T> implements Queue<T> {
    private array: Array<T> = [];


    push(val: T): void {
        this.array.push(val);
    }


    pop(): T | undefined {
        return this.array.pop();
    }
}


const tab = new ArrayQueue<string>();
tab.push('A');
tab.push('B');
tab.push('C');


console.log(tab.pop())
Paweł Próchnicki
Paweł Próchnicki (@p_prochnicki_defy)
1 miesiąc temu

Jest problem, z plikami ‚epub’ na Macu z iBooks nie pojawia się większość wstawek z przykładowym kodem. Da się coś z tym zrobić?

Grzegorz
Grzegorz
1 miesiąc temu

str. 97
7.3

Są to metody abstrakcyjne i oznacza się je również słowem

kluczowym abtract

Sądzę, że powinno być abstract