Rules Hub
Code Ruleset
← Back to all rules
Rule priority, scope & exceptions
Use this to align rules with the senior-level structure (P0/P1/P2, scope, exceptions/tradeoffs).
frontend ruleP2stack specificStack: react
nextjstypeshooks
Type useParams generically instead of runtime-narrowing
Type route params from the actual route shape; keep runtime handling for optional/catch-all and domain validation.
PR: hegnar-forum-web · org-mining-deep-2026-06Created: Jun 17, 2026
Bad example
Old codets
| 1 | const { fullName } = useParams(); |
| 2 | const name = Array.isArray(fullName) ? fullName[0] : fullName; |
Explanation (EN)
Repeated narrowing is unnecessary only when the actual route contract guarantees one string.
Objašnjenje (HR)
Good example
New codets
| 1 | const { fullName } = useParams<{ fullName: string }>(); |
Explanation (EN)
Objašnjenje (HR)
Notes (EN)
Use route parameter generics that match the actual framework and route pattern, including optional and catch-all segments.
Exceptions / Tradeoffs (EN)
A generic does not validate a URL or convert string[] into string. Keep necessary narrowing for catch-all routes and validate domain values after shape handling.