Typ any
jest tzw. wildcardem - pozwala zastąpić każdy inny typ.
Jego właściwością jest, że można założyć, że reprezentuje dowolny inny typ. Można odwołać się do dowolnego pola lub funkcji obiektu oznaczonego jako any
i kompilator nie zwróci błędu.
Problemem jest fakt, że tracone jest typowanie, a więc najważniejsza przewaga TypeScriptu nad JavaScriptem. Oznacza brak sprawdzania, jakiego typu są zmienne, co może prowadzić do trudnych do wykrycia błędów, występujących dopiero podczas działania programu.
const randomObject = {anotherField: "value"}; console.info(randomObject.anotherField) // value console.info((randomObject as any).another.field) // TypeError: Cannot read properties of undefined (reading 'field')
Kompilator nie zgłosił błędu w momencie dostępu do pola another
w obiekcie randomObject
, jako że any
pozwala na założenie że obiekt ma dowolne właściwości. Dopiero w czasie działania programu zostaje rzucony TypeError
.
Reasumując - nie warto używać any
w kodzie z TypeScriptem, a w znacznej większości przypadków jego użycie nie jest konieczne.