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

关于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 11:48:01