TypeScript传参{key:string}[]无法赋值给JSON[]类型报错排查
报错核心原因
你对TypeScript内置JSON类型的认知存在本质偏差:
TypeScript中预置的JSON类型,指代的是JS运行时的全局JSON工具对象,也就是挂载了JSON.parse()、JSON.stringify()方法的那个全局内置对象,并非你理解的「符合JSON语法格式的普通对象/值」。
你看到的报错提示里明确写了类型缺少parse、stringify、[Symbol.toStringTag]属性,这三个属性正好就是全局JSON对象的固有成员,完全对应了这个类型偏差。
你导入的JSON文件在开启resolveJsonModule: true配置后,TS会自动推导出精准的结构化类型{ key: string; }[],这个类型是完全正确的——它就是JSON文件反序列化后得到的普通对象数组,只是它和JSON[](全局JSON对象组成的数组)完全不是一个类型,自然无法赋值。
正确修复方式
- 不要用内置
JSON类型表示JSON反序列化出来的普通值,你可以自己定义符合JSON规范的值类型:
type JsonValue = string | number | boolean | null | JsonValue[] | { [key: string]: JsonValue };
将你定义的takeJsonFile方法参数类型从JSON[]修改为JsonValue[],如果确定传入的都是对象结构,也可以写成Record<string, JsonValue>[],即可正常接收导入的JSON文件参数。
- 如果你的函数需要兼容任意结构的JSON导入结果,也可以将参数类型设置为
unknown,在函数内部做必要的类型校验后再使用,避免类型定义过死带来的适配问题。 - 额外注意:你代码中调用方法时写的是
takeJsonfile(方法名最后f为小写),和定义的takeJsonFile(F大写)存在拼写差异,修复类型问题后也要同步修正这个拼写错误,避免触发方法不存在的报错。
内容的提问来源于stack exchange,提问作者JeyKey
相关产品推荐
相关产品推荐

