关于ReScript中导入TypeScript类型与值的功能疑问
关于ReScript中导入TypeScript类型与值的功能疑问
兄弟,我太懂你这种翻完文档一脸懵的感觉了!当初我研究genType的时候也对着页面来回刷了好几遍,就想找自动从TS导入类型的方法,差点以为自己是不是漏看了关键内容。
先给你理清楚目前的真实情况:
- genType确实支持和TypeScript的导入交互,但它的实现方式和你预想的自动生成external声明不一样,而且这部分的文档确实做得非常不显眼,甚至可以说有点滞后。
- 它的导入逻辑是:你需要手动编写ReScript的
external绑定和类型定义,然后通过genType的特殊注解,把ReScript的类型和对应的TypeScript模块/类型关联起来。这样在编译时,genType会自动检查两边的类型是否一致,如果有不匹配的地方就会抛出错误。
举个实际的例子帮你理解:
假设你有个TS模块./userUtils.ts,里面有个函数和类型:
export function calculateAge(birthYear: number): number { return new Date().getFullYear() - birthYear; } export type UserProfile = {name: string; birthYear: number};
你需要在ReScript里手动写绑定,加上genType的注解:
// 绑定TS函数 @genType(from: "./userUtils.ts") external calculateAge: int => int = "calculateAge" // 关联TS类型,做一致性检查 @genType(type: "./userUtils.ts") type userProfile = { name: string, birthYear: int, }
这样编译的时候,genType会对比两边的类型,如果你把ReScript里的birthYear写成了string,它就会直接报错。
至于为啥文档里只重点讲导出?因为genType最初的设计重心就是让ReScript代码能方便地导出给TS使用,导入功能是后续版本才加上的,官方文档的更新没跟上,导致这部分内容几乎没怎么提及,很容易被忽略。
如果你的需求是自动从TS文件生成ReScript绑定,那genType本身做不到,得用社区里的第三方工具,比如ts2res或者rescript-typedef这类,但这些工具的覆盖度和稳定性可能不如官方的genType。
内容来源于stack exchange
相关产品推荐
相关产品推荐

