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

React Native新架构Turbo Module自定义类型定义及报错解决咨询

解决Turbo Module Spec中自定义类型不被Codegen识别的问题

方案1:直接使用可序列化的对象字面量接口

Codegen仅能识别基础类型、数组、标准对象字面量、$ReadOnly修饰的对象这类可序列化类型,自定义类无法被解析。你可以把自定义类替换成TypeScript接口:

// file: NativeCustomSpec.ts
import type { TurboModule } from 'react-native';

// 用接口定义可序列化的配置结构
interface MyCustomConfig {
  stringField: string;
  stringField2: string;
  boolField: boolean;
  numberField: number;
}

export interface Spec extends TurboModule {
  initialize(configs: MyCustomConfig): Promise<void>;
}

这样Codegen就能正确解析类型,原生端会自动生成对应结构体(iOS为Swift结构体/OC字典,Android为Kotlin数据类/Java HashMap)。

方案2:使用Codegen官方推荐的只读对象类型

如果需要确保配置对象不可修改,可以用Codegen.Object包裹类型定义,这是官方推荐的规范写法:

import type { TurboModule, Codegen } from 'react-native';

type MyCustomConfig = Codegen.Object<{
  stringField: string;
  stringField2: string;
  boolField: boolean;
  numberField: number;
}>;

export interface Spec extends TurboModule {
  initialize(configs: MyCustomConfig): Promise<void>;
}

方案3:保留类结构的兼容写法(不推荐)

如果一定要保留类定义,需要先修复类的语法错误(原代码中stringField2: ''缺失类型声明),再将类实例类型转换为Codegen可识别的结构:

import type { TurboModule } from 'react-native';

class CastledConfig {
  stringField: string = '';
  stringField2: string = ''; // 修复类型缺失问题
  boolField: boolean = false;
  numberField: number = 0;
}

// 将类实例类型转换为接口类型供Codegen解析
type MyCustomConfig = InstanceType<typeof CastledConfig>;

export interface Spec extends TurboModule {
  initialize(configs: MyCustomConfig): Promise<void>;
}

关键提示

新架构的Turbo Module无需再使用传统的ReadableMap,Codegen会自动完成JS对象到原生类型的转换,前提是你的类型仅由可序列化的基础类型组合而成;避免在spec中使用自定义泛型、函数类型或不可序列化的复杂类型,Codegen仅支持有限的类型集合。

内容的提问来源于stack exchange,提问作者1987frank

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:00:11