programowanieFrontend developer

Wyjaśnij, jak TypeScript realizuje ścisłą typizację w porównaniu do JavaScriptu. Jakie są główne różnice i jakie korzyści przynosi ta funkcjonalność w dużych projektach?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

TypeScript to nadbudowa nad JavaScript, która implementuje statyczną (ścisłą) typizację. Oznacza to, że sprawdzenie typów odbywa się na etapie kompilacji, a nie podczas wykonania, jak w JavaScript.

Główne różnice:

  • Statyczne sprawdzanie typów: zmienne, parametry funkcji, wartości zwracane można wyraźnie określać.
  • Typy domyślne (inference): niejawnie określa typ zmiennej na podstawie przypisywanej wartości.
  • Ujednolicenie API: IDE i narzędzia do analizy kodu mogą pokazywać typy, autouzupełniać pola, ostrzegać o błędach.

Zalety w dużych projektach:

  • Jednolity standard, mniej błędów.
  • Szybszy i bezpieczniejszy refaktoryzacja.
  • Ułatwiona praca zespołowa.

Przykład:

type User = { name: string; age: number; } function greet(user: User): string { return 'Witaj, ' + user.name; } const u: User = { name: 'Ivan', age: 30 }; greet(u); // Ok

Pytanie z przekrętem.

Pytanie: Czy można zadeklarować zmienną typu any w projekcie na TypeScript i czy projekt nie straci zalet ścisłej typizacji?

Odpowiedź:

Tak, TypeScript pozwala na używanie typu any, co jest równoważne braku typizacji dla tej zmiennej. Częste używanie any niweczy główną zaletę TypeScript — ścisłą typizację, i ryzykujesz napotkać typowe błędy czasu wykonywania, tak jak w JavaScript.

Przykład:

let data: any = 'test'; data = 42; // Błąd nie wystąpi, ale może powodować problemy

Przykłady rzeczywistych błędów z powodu nieznajomości niuansów tematu.


Historia

Programista często używał typu any dla złożonych obiektów, aby "szybciej się posunąć". W rezultacie, pewnego dnia przyszedł obiekt z brakującymi polami, a aplikacja przestała działać: błąd trafił do produkcji z powodu braku sprawdzania typów.


Historia

W dużym projekcie wymieniano wiadomości pomiędzy dwoma różnymi mikroserwisami. Jeden z serwisów zmienił strukturę obiektu, ale TypeScript nie ostrzegł o tym, ponieważ typ był wyraźnie określony jako any. Błąd znaleziono miesiąc później na skargi użytkownika.


Historia

Młody programista nie opisał typu wartości zwracanej w publicznej funkcji, polegając na automatycznym wnioskowaniu typów. Po refaktoryzacji po drugiej stronie oczekiwania typów przestały działać, co spowodowało łańcuchowe błędy w całym projekcie.