To jest unknown
'value' is of type 'unknown'.Własne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.
`unknown` to typ, który odmawia użycia, dopóki nie udowodnisz, czym jest. Ta odmowa jest całą jego funkcją.
Odtworzenie
declare const value: unknown value.trim()
Build potwierdza, że to emituje dokładnie ten kod.
Dlaczego kompilator tak mówi
`any` mówi „przestań sprawdzać”; `unknown` mówi „najpierw sprawdź”. Stoją w tym samym miejscu hierarchii — wszystko da się przypisać do obu — ale `unknown` nie da się przypisać do niczego bez kroku zawężającego. Ten błąd nie jest przeszkodą do obejścia rzutowaniem: to typ zadający jedyne pytanie, które zawsze należy zadać wartości spoza twojego programu.
Naprawy
- 01
declare const value: unknown if (typeof value === 'string') { value.trim() }
Zawęź je. Wewnątrz strażnika kompilator wie, że to `string`, a wywołanie metody jest sprawdzane jak każde inne.
- 02
function isString(input: unknown): input is string { return typeof input === 'string' } declare const value: unknown if (isString(value)) { value.trim() }
Albo napisz sprawdzenie raz jako predykat typu i używaj wielokrotnie. Zwracany typ `input is string` zamienia funkcję logiczną w coś, na czym kompilator potrafi zawężać.
Wniosek
Sięgaj po `unknown` na każdej granicy — sparsowany JSON, złapany błąd, cokolwiek z sieci — i pozwól temu błędowi wymusić sprawdzenie, które byś pominął.