Nie spełnia ograniczenia
Type 'number' does not satisfy the constraint 'string'.Własne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.
Argument typu został odrzucony w drzwiach. Generyk powiedział, co przyjmie, a to nie jest to.
Odtworzenie
type OnlyStrings<T extends string> = T type Bad = OnlyStrings<number>
Build potwierdza, że to emituje dokładnie ten kod.
Dlaczego kompilator tak mówi
`extends` na liście parametrów to nie dziedziczenie i nie podpowiedź — to kontrola argumentu. `T extends string` znaczy „cokolwiek przyjdzie, musi dać się przypisać do `string`”, a `number` się nie da. Błąd najpierw nazywa argument, a potem ograniczenie, i warto to czytać uważnie: mówi ci, którą stronę pomyliłeś.
Naprawy
- 01
type OnlyStrings<T extends string> = T type Good = OnlyStrings<'hello'>
Przekaż coś, co pasuje. Literalny typ tekstowy daje się przypisać do `string`, więc wchodzi bez pytania.
- 02
type Anything<T extends string | number> = T type AlsoGood = Anything<number>
Albo poszerz ograniczenie, jeśli generyk naprawdę udźwignie więcej, niż deklaruje. Poszerzanie dlatego, że błąd irytuje, a nie dlatego, że ciało jest bezpieczne, tylko przesuwa awarię do środka.
Wniosek
Ograniczenie to kontrakt, który generyk napisał sam o sobie. Przeczytaj ciało, zanim je poluzujesz — ograniczenie zwykle jest nośne.