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

分区同步Realm迁移至灵活同步Realm时遇objectType错误求助

错误原因及解决方案

错误根源

报错objectType must be of type 'string', got ([object Object])的核心原因是你在订阅时传入的对象类型不符合Realm JS的预期:具体来说,realm.objects(AppPermission)中的AppPermission不是合法的Realm模型构造函数或字符串类型的模型名称。

结合你的代码场景,大概率是以下两种情况之一:

  • 直接传入了Schema定义对象(比如target_realm_schema里的AppPermission对象),而非Realm初始化后生成的模型构造函数;
  • AppPermission的引用有误,导致它是一个普通JS对象而非合法的Realm模型标识。

解决方案

1. 改用模型名称字符串调用realm.objects()

将订阅代码中的realm.objects(AppPermission)替换为字符串形式的模型名称,这是最稳妥的方式,可避免构造函数引用问题:

const realmConfig = {
    schema: target_realm_schema,
    sync: {
        user: app.currentUser,
        flexible: true,
        initialSubscriptions: {
            update: (subs, realm) => {
              // 用字符串"AppPermission"替代AppPermission对象
              subs.add(realm.objects("AppPermission"), { name: "AppPermission" });                         
            },
            rerunOnOpen: true,
          },
        newRealmFileBehavior: OpenRealmBehaviorConfiguration,
        existingRealmFileBehavior: OpenRealmBehaviorConfiguration,
    },
};

2. 验证Schema定义的合法性

检查target_realm_schema中的AppPermission模型是否符合Realm规范,必须包含name(字符串类型)和properties字段,示例如下:

const AppPermission = {
  name: "AppPermission", // 必须是字符串,与订阅时的名称一致
  properties: {
    // 示例属性,根据实际需求定义
    id: "string",
    permission: "string"
  }
};
const target_realm_schema = [AppPermission];

3. 确认模型引用正确

如果坚持使用构造函数调用realm.objects(),需要确保AppPermission是Realm初始化后返回的模型构造函数,而非原始的Schema定义对象。比如在打开Realm后,通过realm.models.AppPermission(适用于较新版本Realm JS)获取合法的模型构造函数。

额外检查点

确保OpenRealmBehaviorConfiguration已正确导入并配置(比如设置type: "openImmediately"等),虽然这和当前报错无关,但会影响后续Realm的打开行为。

内容的提问来源于stack exchange,提问作者Duncan Groenewald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:19:53