Type Assertion (twierdzenie typu) to sposób dla programisty, aby poinformować kompilator TypeScript, jak powinien postrzegać typ wartości. Składnia:
let someValue: any = "przykład"; let strLen: number = (someValue as string).length;
Type Assertion nie konwertuje danych w czasie wykonywania, a jedynie podpowiada kompilatorowi ich typ. Jeżeli twierdzenie jest błędne – program się nie zatrzyma, co może prowadzić do błędów w czasie wykonywania. W odróżnieniu od "rzutowania" w C# lub Javie, TypeScript nie dokonuje żadnych konwersji.
Podczas używania nie można bezpośrednio robić twierdzenia między niespokrewnionymi typami (na przykład, as number as User), ale są obejścia przez as unknown.
Czy bezpiecznie jest używać podwójnego twierdzenia
value as unknown as Typedo przekształcania wartości na inny typ?
Błędna odpowiedź: Tak, to jest bezpieczne, ponieważ większość programistów TypeScript tak robi.
Prawidłowa odpowiedź: Nie, to jest niebezpieczne. Taki zabieg wyłącza kontrole kompilatora i pozwala przekształcić dowolny typ w dowolny inny, omijając typizację, co może prowadzić do błędów w czasie wykonywania. Używaj tylko, jeśli jesteś pewien, że wartość rzeczywiście jest zgodna z docelowym typem.
Historia
Programista zrobił Type Assertion dla obiektu z zewnętrznego API jako do swojego własnego interfejsu (
as MyType), nie sprawdzając pól. API zmieniło strukturę i aplikacja zaczęła się krzakić podczas dostępu do nieistniejących kluczy.
Historia
W bibliotece do pracy z DOM ktoś zrobił podwójne twierdzenie
el as unknown as HTMLElement, nie upewniając się co do typu, i później otrzymywał błąd podczas próby wywołania metod HTMLElement na innym obiekcie.
Historia
W próbie rozwiązania błędu typów przy integracji z kodem JS jeden z programistów zastosował
as anydo konfiguracji. To zamaskowało problem, a błąd z nieprawidłowym przetwarzaniem danych ujawniał się tylko w produkcji.