type ParseUrlParams = Url extends `${infer Start}/${infer Rest}` ? ParseUrlParams & ParseUrlParams : Url extends `{${infer Param}}` ? { [P in Param]: string } : {}; function navigate

(path: P, params: ParseUrlParams

) { // ... } function main() { navigate("/foo/bar", { foo: "asd" }); }