You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Typescript编译错误排查:属性不存在与未识别函数问题

问题解决方案

问题1:Upload组件访问data.video/data.title报Property 'xxx' does not exist on type '{}'.ts(2339)

原因

TypeScript 自动将data推断为空对象类型{},导致无法识别自定义属性。

解决办法

  1. 定义强类型接口
    先声明对应的数据结构类型:
// 可根据实际需求添加更多属性
interface UploadData {
  video: string;
  title: string;
}

然后在组件中给data指定该类型:

// 示例:组件内数据定义
const uploadData: UploadData = await fetchUploadData();
// 或函数参数类型约束
function handleUploadSuccess(data: UploadData) {
  console.log(data.video, data.title);
}
  1. 临时类型断言(应急用)
    如果暂时不想定义完整类型,可通过断言绕过类型检查:
// 精确断言
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默认找不到对应的类型声明。

解决办法

  1. 安装并引入官方类型依赖
    确保安装@graphprotocol/graph-ts(包含全局函数的类型定义):
npm install @graphprotocol/graph-ts --save-dev

然后在tsconfig.json的compilerOptions中添加该类型:

{
  "compilerOptions": {
    // 其他已有配置
    "types": ["@graphprotocol/graph-ts"]
  }
}
  1. 手动添加全局类型声明
    如果上述方法无效,在项目根目录创建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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 21:13:14