Vega Codegen常见问题解答
-
是否支持高级TypeScript类型,例如别名、泛型?
对别名、枚举和联合有一些基本的有限支持,例如,包含别名的枚举和联合会假定别名代表的是对象。支持字符串或数字的枚举和联合,但不支持异构类型。不支持泛型。
-
我可以在TypeScript接口中使用哪些类型?
除了一些自定义类型(例如
Int32
、Float
和ArrayBuffer
)外,还支持大多数基本的TypeScript类型。有关完整列表,请参见类型映射表。 -
为什么我会看到.bak文件?
当您使用
--new
标记运行Codegen时,它会为您的Turbo模块实现生成模板文件。现有同名的实现通过.bak
扩展名保留,以便您在需要时将正在进行或以前的实现代码传输到新文件中。一旦不再需要引用备份文件的内容,可以将其删除。 -
我熟悉React Native的Codegen工具,这个工具与Vega Codegen相比如何?
“将TypeScript接口转换为原生代码模板”的基本理念是相同的。支持的确切类型集合存在差异,因为Vega的原生类型支持与React Native不是1:1对应,但它们是相似的。这个工具与构建系统和开发过程的集成位置也存在差异。React Native Codegen仍处于实验阶段,因此将来可能会有重大变化。
-
为什么Codegen会生成Spec文件?
将样板规范与人工提供的实现细节分开,可以让Codegen在不覆盖任何重要内容的情况下可靠地生成和重新生成样板文件。这也允许我们强制让实现与规范相匹配 - 编译器需要待实现的规范中定义的函数。
如果您确实发现自己需要修改Spec
文件,请注意,重新运行Codegen会重新生成这些文件,覆盖您的更改。 -
我可以在一个程序包中加入多个Turbo模块吗?
Vega Codegen目前仅支持一次生成一个模块。这是为了更好地支持自定义选项,例如模块名称的CLI标记,这些选项可能因模块而异。尽管如此,您的程序包仍然可以包含多个Turbo模块,您只需在这些模块上独立运行Codegen即可。
常见错误消息
-
'throw new Error('Optional args are not supported by Vega TurboModules.');'(引发新错误(“Vega Turbo模块不支持可选参数。”);)
Vega Turbo模块不支持可选参数。这不是Codegen的限制,而是Codegen引入的一项检查。如果您的TypeScript接口有可选参数
(arg?: type)
,则这些参数应改为必需项,因为如果不传递参数,Turbo模块将在运行时失败。
包裹Turbo模块的JavaScript包装器可以支持可选参数。 -
'Unrecognized generic type 'undefined' in NativeModule spec.'(出现NativeModule规范中无法识别的泛型类型“undefined”)
此类问题很可能是由从另一个文件导入类型引起的。Codegen不支持这种操作。我们建议将这些类型移到与TypeScript接口相同的文件。某些类型(
Int32
、Double
、Float
等)可以从@amazon-devices/keplerscript-turbomodule-api
导入,Codegen支持以这种方式导入。 -
'Unrecognized generic type 'T' in Native Module spec.'(出现NativeModule规范中无法识别的泛型类型“T”)
Vega Turbo模块不支持泛型。
-
'TypeScript type annotation 'TSAnyKeyword' is unsupported in NativeModule specs.'(NativeModule规范中不支持TypeScript类型注释“TSAnyKeyword”)
any
不是Codegen支持的类型。考虑使用更严格的类型定义。如果您有像(event: any) => void
这样的实际接受多个类型的回调类型,可以使用@amazon-devices/keplerscript-turbomodule-api
中的CallbackParam
类型。 -
'npm ERR! 404 Not Found - GET https://registry.npmjs.org/keplerscript-turbomodule-api - Not found'('npm ERR!404未找到 - 获取https://registry.npmjs.org/keplerscript-turbomodule-api - 未找到)
在运行脚本之前,您需要在本地工作区中安装程序包。
Last updated: 2025年9月30日