Strona główna / Artykuły

TypeScript nie przekształca słabej inżynierii w silną inżynierię.

TypeScript nie naprawia słabej jakości projektowania. Ścisła bezpieczeństwo typów pomaga, ale złe granice i niesprawdzone zasady domeny nadal powodują błędy. Jakość kodu jest ważniejsza niż składnia.

Wydawca: REACTAPP.TOP3 min czytania804 słów

Źródła: TypeScript Doesn’t Make Bad Developers Good

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

  • Dziesięć patternów TypeScriptu, które przekształcają błędy w trakcie ruchu w błędy kompilacji — Poznaj dziesięć technik TypeScriptu, od zjednoczeń dyskryminowanych i funkcji satisfies po typy branded oraz narzędzie infer, które pozwalają kompilatorowi odrzucać nieważne stany przed wypuszczeniem kodu.
  • Dlaczego poważne zespoły JavaScriptu przyjmują TypeScript — Typy jako umowy, bezpieczniejsze refaktoryzacje oraz korzyści z narzędzi, które rosną z czasem.