TypeScript区分联合类型嵌套数组收窄问题咨询
解决TypeScript联合类型赋值错误问题
问题分析
你遇到的错误Type 'Abstract[]' is not assignable to type 'Abstract[] | Section[]',本质是TypeScript无法自动确认你的对象完全匹配MixedSearchResult联合类型中的某一个分支——尽管你指定了type判别字段,但data的类型可能存在模糊性(比如abs的实际类型不是严格的Abstract[],或通过as Abstract[]断言的类型不够明确)。
解决方案
以下几种方法可以解决这个问题:
1. 用const断言让TypeScript精确推断类型
通过as const强制TypeScript推断对象的具体字面量类型,确保它匹配联合类型的某一分支:
const result = { type: MixedResultType.Abstract, data: abs as Abstract[], } as const satisfies MixedSearchResult;
这种方式既保留了类型检查,又能让TypeScript明确对象的具体类型。
2. 显式断言为对应的联合分支
直接将对象断言为联合类型中的具体分支,再赋值给MixedSearchResult:
const result: MixedSearchResult = { type: MixedResultType.Abstract, data: abs as Abstract[], } as { type: MixedResultType.Abstract; data: Abstract[] };
3. 确保abs的类型严格为Abstract[]
避免依赖类型断言,直接给abs标注明确的类型:
// 先定义严格类型的abs const abs: Abstract[] = [/* 你的Abstract数据 */]; // 再创建MixedSearchResult对象 const result: MixedSearchResult = { type: MixedResultType.Abstract, data: abs, };
最终创建混合结果数组示例
当类型明确后,你可以轻松创建包含不同类型结果的数组:
// 示例数据 const abstracts: Abstract[] = [{ id: 1, content: '摘要内容' }]; const sections: Section[] = [{ id: 101, title: '章节标题' }]; // 混合结果数组 const searchResults: MixedSearchResult[] = [ { type: MixedResultType.Abstract, data: abstracts, }, { type: MixedResultType.Section, data: sections, }, ];
内容的提问来源于stack exchange,提问作者landorid
相关产品推荐
相关产品推荐

