如何在ts中将字符串url设置为对象类型?
样本代码:
type KeyUrl<T> = T extends `/${infer U}` ? U : never;
type TUrl<T> = { [k in KeyUrl<T>]: string };
// --------------------------------------------- this line work
const url = "/path";
const obj = {} as TUrl<typeof url>;
obj.path // work;
// --------------------------------------------- this line error
const url = "/path/path2";
const obj = {} as TUrl<typeof url>;
obj.path // Property 'path' does not exist;
obj.path2 // Property 'path2' does not exist;
谢谢。
1条答案
按热度按时间new9mtju1#
您的问题是
${infer U}
是贪婪的,它吃掉了所有字符串。所以对于
/path/path2
,它会得到整个字符串,因为它不会拆分它。在创建定义KeyUrl
时,你需要考虑到这一点。它的作用是获取
path
并检查是否存在一个或多个段,然后使用剩余路径调用KeyUrl
。您可以在此处查看更复杂的示例