Szukaj…


Wprowadzenie

Jeśli argumenty dla systemów typów są ogólnie przekonujące, to będziesz zadowolony z TypeScript.

Wnosi wiele zalet systemu typów (bezpieczeństwo, czytelność, ulepszone oprzyrządowanie) do ekosystemu JavaScript. Ma również pewne wady systemów typów (zwiększona złożoność i niekompletność).

Uwagi

Zalety języków pisanych i nieopisanych są dyskutowane od dziesięcioleci. Argumenty dla typów statycznych obejmują:

  1. Bezpieczeństwo: systemy typu pozwalają na wczesne wykrycie wielu błędów bez uruchamiania kodu. TypeScript można skonfigurować tak, aby dopuszczał mniej błędów programistycznych
  2. Czytelność: typy jawne ułatwiają zrozumienie kodu. Jak napisał Fred Brooks : „Pokaż mi swoje schematy blokowe i ukryj swoje tabele, a ja nadal będę mistyfikowany. Pokaż mi swoje tabele i zwykle nie będę potrzebować twoich schematów blokowych; będą oczywiste”.
  3. Oprzyrządowanie: systemy typów ułatwiają zrozumienie kodu dla komputerów. Dzięki temu narzędzia takie jak IDE i linters są bardziej wydajne.
  4. Wydajność: systemy typów przyspieszają działanie kodu, zmniejszając potrzebę sprawdzania typu środowiska wykonawczego.

Ponieważ dane wyjściowe TypeScript są niezależne od jego typów , TypeScript nie ma wpływu na wydajność. Argument za użyciem TypeScript opiera się na trzech pozostałych zaletach.

Argumenty przeciwko systemom typów obejmują:

  1. Zwiększona złożoność: systemy typów mogą być bardziej złożone niż opisywane przez nich środowisko wykonawcze. Funkcje wyższego rzędu mogą być łatwe do prawidłowego wdrożenia, ale trudne do napisania . Postępowanie z definicjami typów stwarza dodatkowe bariery w korzystaniu z bibliotek zewnętrznych.
  2. Dodano gadatliwość: adnotacje typu mogą dodawać dodatkowe elementy do kodu, utrudniając przestrzeganie podstawowej logiki.
  3. Wolniejsza iteracja: wprowadzając krok kompilacji, TypeScript spowalnia cykl edycji / zapisywania / przeładowywania.
  4. Niekompletność: System typów nie może być jednocześnie solidny i kompletny. Istnieją poprawne programy, na które TypeScript nie zezwala. A programy, które akceptuje TypeScript, mogą nadal zawierać błędy. System typów nie zmniejsza potrzeby testowania. Jeśli używasz TypeScript, być może będziesz musiał dłużej czekać na użycie nowych funkcji języka ECMAScript.

TypeScript oferuje kilka sposobów rozwiązania wszystkich tych problemów:

  1. Dodano złożoność. Jeśli wpisywanie części programu jest zbyt trudne, TypeScript można w dużej mierze wyłączyć za pomocą nieprzezroczystego any typu. To samo dotyczy modułów zewnętrznych.
  2. Dodano gadatliwość. Można to częściowo rozwiązać za pomocą aliasów typów i zdolności do wnioskowania o typach. Pisanie czystego kodu jest tak samo sztuką jak nauka: usuń zbyt wiele adnotacji typu, a kod może nie być już czytelny dla ludzi.
  3. Wolniejsza iteracja: krok kompilacji jest stosunkowo powszechny we współczesnym programowaniu JS, a TypeScript jest już zintegrowany z większością narzędzi do kompilacji . A jeśli TypeScript wcześnie wykryje błąd, może zaoszczędzić cały cykl iteracji!
  4. Niekompletność. Chociaż tego problemu nie można całkowicie rozwiązać, TypeScript był w stanie przechwytywać coraz więcej ekspresyjnych wzorców JavaScript z czasem. Ostatnie przykłady obejmują dodanie typów odwzorowanych w TypeScript 2.1 i mixins w 2.2 .

Argumenty za i przeciw systemom typów ogólnie odnoszą się równie dobrze do TypeScript. Użycie TypeScript zwiększa koszty związane z rozpoczęciem nowego projektu. Ale z biegiem czasu, gdy projekt powiększa się i zyskuje coraz więcej współpracowników, mamy nadzieję, że zalety jego zastosowania (bezpieczeństwo, czytelność, oprzyrządowanie) staną się silniejsze i przeważą nad wadami. Odzwierciedla to motto TypeScript: „JavaScript, który skaluje się”.

Bezpieczeństwo

TypeScript wychwytuje błędy typu na początku analizy statycznej:

function double(x: number): number {
  return 2 * x;
}
double('2');
//     ~~~ Argument of type '"2"' is not assignable to parameter of type 'number'.

Czytelność

TypeScript umożliwia edytorom dostarczanie dokumentacji kontekstowej:

Autouzupełnianie kontekstowe dla metody odcinania łańcucha

Nigdy nie zapomnisz, czy String.prototype.slice znów bierze (start, stop) czy (start, length) !

Obróbka

TypeScript umożliwia redaktorom wykonywanie automatycznych refaktorów, którzy znają reguły obowiązujące w tych językach.

Symbol zmienia nazwę, ale tylko we własnym zakresie

Tutaj, na przykład, Visual Studio Code może zmieniać nazwy odniesień do wewnętrznego foo bez zmiany zewnętrznego foo . Trudno byłoby to zrobić za pomocą prostego wyszukiwania / zamiany.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow