TypeScript 通用约束函数:参数被错误地推断为任意值,

643ylb08  于 5个月前  发布在  TypeScript
关注(0)|答案(2)|浏览(71)

TypeScript 版本: 4.0.2
搜索词:
代码

declare function useCallback<T extends (...args: any[]) => any>(
    callback: T,
): T;
const test: ((x: string) => void) | undefined = useCallback((x) => {
    x; // ❌ type is inferred as `any`, expected `string`
});

上下文中,这段 useCallback 的输入是从 React 类型中提取出来的。

预期行为: 见上文
实际行为: 见上文
** playground 链接:**https://www.typescriptlang.org/play?#code/CYUwxgNghgTiAEAzArgOzAFwJYHtX2QGcQBhKCCAIyjAGsAeAFXhAA8MRVhD4AKAOkGwA5oQBc8KKgCeAbQC6ASngBeAHySZa3gCh4++GHJUatCYwA0OxeYDcOsHkIZ4HZxN69WE5zCyphZXV4ADccLGBlAB8CLhBEfxBgVQJiMgpqOk9WII0Abz0DVlt4AHpS+EAZcldpAAcELB5-RBAYOGSoHgADKWkuixZWeswk+C7ff2EunQBfRVsgA
相关问题:

xiozqbni

xiozqbni1#

这里的问题是上下文类型被 undefined | (x: string) => void 代替,而不仅仅是 (x: string) => void - 这使得我们使用返回类型作为 T 的推断候选者的匹配逻辑失效。

fnatzsnv

fnatzsnv2#

这可能与以下内容有关:#50719 (评论)

相关问题