Strona główna / Artykuły / TypeScript nie przekształca słabej inżynierii w silną inżynierię.

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ę.

804 słów

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.