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.
Typ unknown
jest przeciwieństwem any
- zmienna tego typu nie może być traktowana jako żaden konkretny typ ani nie jest możliwe odwołanie do jakichkolwiek właściwości obiektu tak długo, jak nie zostanie wykonane rzutowanie (casting) do któregoś konkretnego typu.
type ObjType = { field: { nestedField: string } } const obj: ObjType = {field: {nestedField: "nestedValue"}}; console.info(obj.field.nestedField) // nestedValue console.info((obj as any).notExistingField) // undefined, no Error thrown console.info((obj as any).field.nestedField) // nestedValue console.info((obj as unknown).notExistingField) // Compilation error - Object is of type 'unknown'. console.info((obj as unknown).field.nestedField) // Compilation error - Object is of type 'unknown'.