RTK Query传递unique symbol至useGetAssetsByIdQuery遇TS类型错误求助
问题分析与解决方案
这个看似矛盾的错误,核心原因是TypeScript中unique symbol类型的特殊性:
每个通过Symbol()创建的unique symbol都是完全唯一的类型——哪怕你给变量标注了const device_id: unique symbol,这个变量的类型也只是它自身独有的那个唯一符号类型,和错误提示里GetAssetsByIdApiArg | unique symbol中的unique symbol并非同一类型(后者大概率是API定义中某个特定的全局唯一符号,而非泛指所有unique symbol)。
具体解决步骤
- 核对API参数类型定义:
打开生成useGetAssetsByIdQuery的API切片代码,确认GetAssetsByIdApiArg到底要求的是symbol还是unique symbol。如果只是普通symbol,把变量类型修改为symbol即可:const device_id: symbol = Symbol(props.id); - 若确实需要
unique symbol:
API定义里的unique symbol肯定是某个特定的全局符号(比如export const ASSET_ID_SYMBOL = Symbol('asset-id') as unique symbol),你必须传入这个特定的符号实例,而非自己新建的Symbol(props.id)。因为每个unique symbol的类型都是独有的,无法互相赋值。 - 排查类型定义误解:
有时可能是你看错了类型要求——比如API实际需要的是字符串ID,你却错误地转成了symbol。这种情况下直接使用props.id即可,无需转换。
举个对应场景的例子,如果API定义是这样的:
export const ASSET_ID = Symbol('asset-id') as unique symbol; type GetAssetsByIdApiArg = typeof ASSET_ID | string;
那你必须传入ASSET_ID这个特定符号,而非自行创建新的symbol实例。
内容的提问来源于stack exchange,提问作者user101289
相关产品推荐
相关产品推荐

