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
相关问题:
- Cannot infer generic argument type from passed callback #31146
- 为提议的 React Hooks API 添加类型定义 DefinitelyTyped/DefinitelyTyped#30057 (评论)
2条答案
按热度按时间xiozqbni1#
这里的问题是上下文类型被
undefined | (x: string) => void
代替,而不仅仅是(x: string) => void
- 这使得我们使用返回类型作为T
的推断候选者的匹配逻辑失效。fnatzsnv2#
这可能与以下内容有关:#50719 (评论)