Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么TypeScript不推断值的类型以及如何避免这种行为_Typescript_Type Inference_Value Type - Fatal编程技术网

为什么TypeScript不推断值的类型以及如何避免这种行为

为什么TypeScript不推断值的类型以及如何避免这种行为,typescript,type-inference,value-type,Typescript,Type Inference,Value Type,我在TypeScript中实现了类型安全路由器,在推断类型时遇到了麻烦 导出接口路由{ 匹配(路径:字符串):Args | void; 构建(args:args):字符串; } 导出类型Routes={[Tag in keyof State]:Route}; 导出接口路由器{ 匹配(路径:字符串):部分|无效; 构建(状态:部分):字符串; } 导出函数createRouter(路由:路由):路由器{ /*…*/返回{}如有; } 常量根:路由={ 匹配:(路径)=>/*…*/未定义, 内部版本

我在TypeScript中实现了类型安全路由器,在推断类型时遇到了麻烦

导出接口路由{
匹配(路径:字符串):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