// Template-literal + infer as a typed string parser (real use: typed i18n keys)typeParams<S extendsstring> =
S extends`${string}:${infer P}/${infer Rest}` ? P | Params<Rest>
: S extends`${string}:${infer P}` ? P
: never;
type P = Params<'/users/:userId/posts/:postId'>; // 'userId' | 'postId'