Przejdź do treści

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    TS18046

    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

    1. 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.

    2. 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ął.

    Błędy