繁体   English   中英

返回类型应定义回调参数类型

[英]Return type should define callback param type

为什么参数childrenunknown[] ??

它应该被推断为string[]因为我正在返回 'asdf' 并且我的函数定义是: mapFunction: (children: K[]) => K,)

类型

我做错了什么?

function returnTypeDefinesParamType<K>(mapFunction: (children: K[]) => K,):void{
    // ... some code
}
returnTypeDefinesParamType( (children)=>{
    return 'asdf';
})

我会说这是microsoft/TypeScript#31146 的一个实例; 编译器尝试在具有完整回调类型之前和推断K (这是一个非常规名称顺便说一句, K通常表示类似键的类型;在这里只考虑T )之前,在上下文中键入children ,但它不能这样做它。 推理失败, K成为最宽的可能类型: unknown 这不一定是错误的,因为没有注释children => "asdf"可分配给(children: unknown[]) => unknown ,但它对您没有用。 GitHub 中的那个问题被标记为错误,但尚不清楚是否会对此采取措施; 我希望这更多是设计限制。

在任何情况下,如果您想解决它,您将需要在某处手动注释或指定类型。 一种方法是注释回调参数:

returnTypeDefinesParamType((children: string[]) => {
    return 'asdf';
});

或者您可以手动指定类型参数:

returnTypeDefinesParamType<string>((children) => {
    return 'asdf';
}); 

无论哪种方式,您都将被困在向编译器拼写内容以弥补其推理能力的限制。

Playground 链接到代码

returnTypeDefinesParamType<string>( (children)=>{
return 'asdf';
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM