Przejdź do treści
Zachowaj literały generykiem const

    ↑↓ ruch · ⏎ otwórz · esc zamknij

    Wzorce

    Jak sprawić, by pomocnik wywnioskował literalną krotkę bez wymagania od wywołujących `as const`?

    Oznacz parametr typu jako `const`; inferencja wybierze wtedy readonly literalne kształty zamiast poszerzonych tablic i prymitywów.

    Przepis

    function tuple<const T extends readonly unknown[]>(...values: T): T {
      return values
    }
    
    const statuses = tuple('idle', 'loading', 'done')
    const point = tuple(10, 20)

    Build to kompiluje i sprawdza każdy wynik poniżej.

    Jak to działa

    1. 01
      const T extends readonly unknown[]

      `const` zmienia preferencję inferencji, a ograniczenie readonly dostarcza zgodny wąski cel.

    2. 02
      ...values: T

      Parametr resztowy zapisuje każdy argument jako osobną pozycję krotki.

    Co dostajesz

    Gdzie to zawodzi

    Inferencja const jest płytka i oparta na preferencji. Wartości zapisane już w poszerzonych zmiennych pozostają poszerzone, a mutowalne ograniczenia mogą zmusić kompilator do powrotu do mutowalnych tablic.

    Wniosek

    Używaj parametrów typu const na granicach API, gdzie wywołującym przydaje się precyzja literałów bez dodatkowej składni.

    Zobacz też

    Wzorce