TypeScript nie przekształca słabej inżynierii w silną inżynierię.
Ścisłe typy pomagają, ale wszelkie złe granice oraz nieweryfikowane reguły domeny nadal są dostarczane – kunszt przewyższa składnię.
Bезpieczeństwo typów to nie to samo co jakość oprogramowania
TypeScript zapobiega ważnej klasie błędów. Nie chroni jednak przed słabym projektem, niejasnymi modelami domenowymi ani niedbałym zachowaniem w czasie wykonywania.
function transferMoney(
from: Account,
to: Account,
amount: number
) {
from.balance -= amount;
to.balance += amount;
}
const user: any = fetchUser();
user.address.street.foo.bar();
interface User {}
interface UserResponse {}interface UserData {}interface UserDTO {}interface UserPayload {}interface UserState {}
TypeScript nie rozumie logiki biznesowej
Kompilatory nie mogą ocenić, czy zasada nakładania zniżek jest sprawiedliwa. Typy odnotowują strukturę; ludzie nadal muszą tworzyć testy i zapewniać niezmienniki.
Najniebezpieczniejszym typem jest any
any unieruchamia narzędzie, którego używamy dzięki kompilatorowi. Lepiej stosować unknown w połączeniu z mechanizmami zawężania typów lub precyzyjne unie.
Mocne typy nie mogą uratować słabej architektury
Szarytacja, granice i styki modułów są ważniejsze niż dekorowanie chaotycznej struktury interfejsami.
Typy opisują rzeczywistość
Modele powinny odpowiadać domenie. Typy, które twierdzą, że wartość nie jest null, podczas gdy API zwracają null, tworzą fałszywe poczucie pewności.
Złe nawyki rozwijają się szybciej w TypeScript
Kopiowanie i wklejanie DTO, nadmiarowo rozbudowane „bóstwa typów” oraz spam z twierdzeniami rozprzestrzeniają się szybko pod pozorem „typowania”.
Najlepsi programiści TypeScript byli już ostrożnymi programistami JavaScript
Dyscyplina poprzedza składnię. TypeScript wzmacnia nawyki – zarówno dobre, jak i złe.
Traktuj kompilator jako partnera
Włącz rygor, napraw przyczyny źródłowe i pozwól błędom kierować refaktoryzacją, zamiast je tłumić.
Prawdziwym ulepszeniem nie jest TypeScript
Ulepszeniem są jaśniejsze moduły, przetestowane reguły domeny oraz uczciwe typy. TypeScript to narzędzie do tej pracy – nie zamiennik.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z mapownikami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z mapownikami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z mapownikami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z maperami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z maperami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z maperami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z maperami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z maperami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z maperami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z mapownikami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z mapownikami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Włącz noImplicitAny i strictNullChecks przed dyskusją na temat wytycznych stylowych; te dwa parametry wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
Łącz DTO-y na granicach z mapownikami — nie pozwól, by struktury persistencji przenikały do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Zanim zaczniesz dyskutować o wytycznych stylowych, włącz noImplicitAny oraz strictNullChecks; te dwa flagi wykrywają więcej rzeczywistych błędów niż zasady nazewnictwa.
W punktach granicznych łącz DTO z maperami — nie wpuszczaj struktur persistencji do komponentów interfejsu użytkownika tylko dlatego, że obie są „typizowane”.
Literatura pokrewna
- Sześć technik TypeScript, które przekształcają typy w skuteczną prewencję błędów — Dowiedz się, jak funkcje satisfies, związki oznaczone tagami, mechanizm never checks, typ unknown, typy pochodne oraz unikalne identyfikatory pomagają TypeScript wykrywać rzeczywiste błędy już na etapie kompilacji, a nie w środowisku produkcyjnym.