Rozwiązanie z komentarzem
Opublikowano 27 sierpnia 2026Rozwiązanie
type Absolute<N extends number> = `${N}` extends `-${infer R}` ? R : `${N}`
Najczęstsza błędna odpowiedź
type Absolute<N extends number> = N extends `-${infer R}` ? R : `${N}`
Wzorzec jest dobry, ale badany obiekt jest złego rodzaju. `-5` to literał liczbowy, a literał liczbowy nigdy nie pasuje do wzorca literału szablonowego, więc warunek jest zawsze fałszywy i każde wejście wpada w `${N}` — zwracając `"-5"` bez zmian.
Linia po linii
`${N}`Wstawienie liczby do pustego poza tym literału szablonowego to odpowiednik `String(n)` na poziomie typów. `-5` staje się literałem łańcuchowym `"-5"`, do którego wzorce mogą się już dopasować.
`-${infer R}`Minus dopasowywany jest dosłownie, a `R` wiąże całą resztę. Liczby dodatnie po prostu nie pasują do tego wzorca i idą gałęzią fałszywą, więc osobny test znaku jest zbędny.
Do zapamiętania
Na poziomie typów nie ma arytmetyki, ale jest tekst. Zamiana liczby na łańcuch przekształca problemy liczbowe w problemy dopasowania wzorca — i tak właśnie działają standardowe sztuczki na wartość bezwzględną, liczenie cyfr i porównanie znaku.
