为什么TypeScript不推断值的类型以及如何避免这种行为
我在TypeScript中实现了类型安全路由器,在推断类型时遇到了麻烦为什么TypeScript不推断值的类型以及如何避免这种行为,typescript,type-inference,value-type,Typescript,Type Inference,Value Type,我在TypeScript中实现了类型安全路由器,在推断类型时遇到了麻烦 导出接口路由{ 匹配(路径:字符串):Args | void; 构建(args:args):字符串; } 导出类型Routes={[Tag in keyof State]:Route}; 导出接口路由器{ 匹配(路径:字符串):部分|无效; 构建(状态:部分):字符串; } 导出函数createRouter(路由:路由):路由器{ /*…*/返回{}如有; } 常量根:路由={ 匹配:(路径)=>/*…*/未定义, 内部版本
导出接口路由{
匹配(路径:字符串):Args | void;
构建(args:args):字符串;
}
导出类型Routes={[Tag in keyof State]:Route};
导出接口路由器{
匹配(路径:字符串):部分|无效;
构建(状态:部分):字符串;
}
导出函数createRouter(路由:路由):路由器{
/*…*/返回{}如有;
}
常量根:路由={
匹配:(路径)=>/*…*/未定义,
内部版本:()=>“/”
};
const blog:Route={
匹配:(路径)=>/*…*/未定义,
生成:({id})=>'/blog/'+id
};
const router1=createRouter({root,blog});
const router2=createRouter({root,blog});
const router3=createRouter({root,blog});
推断出的router1
类型是路由器
。
但是我希望路由器会有一个类型路由器
我尝试添加类型参数(请参见router2
),它可以正常工作
我还认为tsc@2.7.2无法推断路由
对象的类型,我显式添加了类型(路由3)。它也能正常工作
有没有办法在不显式添加类型的情况下解决此问题?
至少我想得到一个合理的解释,为什么TS在这种情况下会将值类型视为任何类型。这个问题在Typescript 2.8中得到了解决。这可能与这个问题有关
谢谢你的回答。我降到了2.6.x,它按预期工作。@Kayo希望能有所帮助。它看起来像一个被修复的bug