绑定到 JS 对象
JavaScript 中的对象有下面这些用例:
- 作为数据存储,类似其他语言(比如 Rescript 和 C 语言)的“记录”或者“结构体” 
- 作为哈希表 
- 作为类 
- 作为输入或输出的模块 
ReScript 清楚地区分这四种不同用途的 JS 对象的绑定方式。本章描述前三种情况。对 JS 模块对象的绑定会在从 JS 导入/导出到 JS中说明。
绑定到类似“记录”的 JS 对象
使用 ReScript 记录进行绑定
如果你的 JavaScript 对象有固定的字段,那么它在概念上就像一个 ReScript 记录。因为 ReScript 记录编译成干净的 JavaScript 对象,所以你可以将 JS 对象的类型标注为 ReScript 的记录!
external 的相关文档在这里。@module 的相关文档在这里。
如果你想或者需要在 ReScript 端和 JavaScript 端使用不同的字段名,你可以用 @as 装饰器:
这用于映射到无法在 ReScript 中表达的 JavaScript 属性名称(例如 ReScript 关键字)。
也可以通过将索引传递给 @as 装饰器来将 ReScript 记录映射到 JavaScript 数组:
使用 ReScript 对象进行绑定
除此之外,你也可以使用 ReScript 对象 去对 JS 对象进行建模:
使用特殊的 Getter 和 Setter 属性进行绑定
除此之外,你还可以使用 @get 和 @set 去绑定 JS 对象的独立字段:
你也可以使用 @get_index 和 @set_index 去访问动态属性或者索引:
绑定到类似哈希表的 JS 对象
如果你的 JavaScript 对象:
- 可能会增加或者删除键 
- 只包含同类型的值 
那么它不是真正意义上的对象,而是一个哈希表。我们可以使用 Js.Dict,它包含 get,set 等操作并且仍然可以干净地编译为 JavaScript 对象。
绑定到作为类的 JS 对象
使用 @new 来模拟 new Date():
如果你要导入的 JS 模块本身是一个类,你可以将 new 和 module 串联使用: