Typescript编译错误排查:属性不存在与未识别函数问题
问题解决方案
问题1:Upload组件访问data.video/data.title报Property 'xxx' does not exist on type '{}'.ts(2339)
原因
TypeScript 自动将data推断为空对象类型{},导致无法识别自定义属性。
解决办法
- 定义强类型接口
先声明对应的数据结构类型:
// 可根据实际需求添加更多属性 interface UploadData { video: string; title: string; }
然后在组件中给data指定该类型:
// 示例:组件内数据定义 const uploadData: UploadData = await fetchUploadData(); // 或函数参数类型约束 function handleUploadSuccess(data: UploadData) { console.log(data.video, data.title); }
- 临时类型断言(应急用)
如果暂时不想定义完整类型,可通过断言绕过类型检查:
// 精确断言 console.log((data as { video: string; title: string }).video); // 宽松断言(不推荐长期使用) console.log((data as any).title);
问题2:GraphProtocol生成的schema.ts中assert/changetype未被识别
原因
assert和changetype是Graph Protocol框架内置的全局函数,TypeScript默认找不到对应的类型声明。
解决办法
- 安装并引入官方类型依赖
确保安装@graphprotocol/graph-ts(包含全局函数的类型定义):
npm install @graphprotocol/graph-ts --save-dev
然后在tsconfig.json的compilerOptions中添加该类型:
{ "compilerOptions": { // 其他已有配置 "types": ["@graphprotocol/graph-ts"] } }
- 手动添加全局类型声明
如果上述方法无效,在项目根目录创建global.d.ts文件,添加以下内容:
declare function assert(condition: boolean, message?: string): void; declare function changetype<T>(value: unknown): T;
该声明会让TypeScript识别这两个函数,同时通过泛型定义解决Untyped function calls may not accept type arguments错误。
3. 检查tsconfig的文件包含范围
确保tsconfig.json的include字段覆盖了生成的schema.ts文件:
{ "include": ["./src/**/*", "./generated/**/*"] // 替换为你的schema.ts实际路径 }
内容的提问来源于stack exchange,提问作者Z. Khan B.
相关产品推荐
相关产品推荐

