分区同步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
相关产品推荐
相关产品推荐

