为何泛型参数类型无法赋值?TypeScript代码报错咨询
TypeScript代码错误分析
这段代码的核心问题是回调函数类型不兼容:
- 函数
bar要求传入的callback是一个泛型函数,它必须能接受任意类型T对应的Bar<T>参数(调用该回调时,可传入Bar<number>、Bar<boolean>等任意Bar类型)。 - 但你传入的
callback明确限定只接受Bar<string>类型的参数,无法处理其他类型的Bar参数,完全不符合bar对回调函数的类型要求,因此TypeScript会抛出类型不匹配的错误。
修复方案
方案一:让bar函数绑定特定泛型类型
如果希望callback只处理string类型的Bar,可以把泛型定义移到bar函数层面,让整个函数的泛型约束回调的类型:
type Bar<T> = { value: T } // 泛型T定义在bar函数上 function bar<T>(options: { callback: (data: Bar<T>) => void }) {} bar<string>({ callback(data: Bar<string>) {} })
方案二:让传入的回调也是泛型函数
如果确实需要callback是泛型函数,那传入的回调也得定义为泛型:
type Bar<T> = { value: T } function bar(options: { callback: <T>(data: Bar<T>) => void }) {} bar({ // 回调定义为泛型函数 callback<T>(data: Bar<T>) {} })
内容的提问来源于stack exchange,提问作者troy
相关产品推荐
相关产品推荐

