type SplitPath
= P extends `${infer X}/${infer Y}` ? [X, ...SplitPath = P extends `:${infer Var}` ? [Var] : [];
type Cast = A extends B ? A : B;
type FilterPathVar = P extends [`${infer Head}`] ? KeepPathVar = P[number];
export type PathVariables = Record (p: P) => FilterPathVar