TypeScript中如何处理联合类型变量?解决push调用类型报错
解决TypeScript联合类型调用push报错的问题
针对你遇到的联合类型变量无法直接调用数组方法的问题,核心是要通过类型收窄让TypeScript明确当前变量的具体类型,以下是几种实用方案:
方法一:用Array.isArray()做类型判断
这是最直接的方式,TypeScript原生识别Array.isArray()作为类型守卫,进入判断分支后会自动将变量类型收窄为string[]:
let campaigns: {[key: string]: string[]} | string[] = []; if (Array.isArray(campaigns)) { campaigns.push("string"); // 此处无报错,TypeScript已确认是数组类型 }
方法二:自定义类型守卫函数
如果需要更复杂的类型校验逻辑,可以封装一个自定义类型守卫,明确告诉TypeScript如何判断变量是数组类型:
function isStringArray(value: {[key: string]: string[]} | string[]): value is string[] { return Array.isArray(value); } let campaigns: {[key: string]: string[]} | string[] = []; if (isStringArray(campaigns)) { campaigns.push("string"); }
方法三:类型断言(谨慎使用)
如果你能100%确定当前变量就是数组类型,可以用类型断言强制跳过TypeScript的类型检查,但这种方式会失去类型校验的保护,运行时如果类型不符会报错:
let campaigns: {[key: string]: string[]} | string[] = []; (campaigns as string[]).push("string");
内容的提问来源于stack exchange,提问作者Eldar Tailov
相关产品推荐
相关产品推荐

