文档 / 语言手册 / 互操作速查表
Edit

互操作速查表

这是一个带有示例的专业词汇表。所有的功能都会在后面的页面描述。

装饰器列表

注意:在 ReScript 8.3 版本之前,全部属性(attributes)都是以 bs. 作为前缀的。在新版本中不再需要使用该前缀,格式化工具会自动删除它。

属性

扩展点

原生 JS

ReScriptJS Output
let add = %raw("(a, b) => a + b")
%%raw("const a = 1")

全局值

ReScriptJS Output
@val external setTimeout: (unit => unit, int) => float = "setTimeout"

全局模块值

ReScriptJS Output
@val @scope("Math")
external random: unit => float = "random"

let someNumber = random()

@val @scope(("window", "location", "ancestorOrigins"))
external length: int = "length"

可空值

ReScriptJS Output
let a = Some(5) // compiles to 5
let b = None // compiles to undefined

可以抛弃 option 类型,使用 Js.Nullable.t 来处理一个可以是 undefinednull 的值:

ReScriptJS Output
let jsNull = Js.Nullable.null
let jsUndefined = Js.Nullable.undefined
let result1: Js.Nullable.t<string> = Js.Nullable.return("hello")
let result2: Js.Nullable.t<int> = Js.Nullable.fromOption(Some(10))
let result3: option<int> = Js.Nullable.toOption(Js.Nullable.return(10))

JS 对象

函数

对象方法与链式调用

ReScriptJS Output
@send external map: (array<'a>, 'a => 'b) => array<'b> = "map"
@send external filter: (array<'a>, 'a => 'b) => array<'b> = "filter"
[1, 2, 3]
  ->map(a => a + 1)
  ->filter(a => mod(a, 2) == 0)
  ->Js.log

可变参数

ReScriptJS Output
@module("path") @variadic
external join: array<string> => string = "join"

多态函数

ReScriptJS Output
@module("Drawing") external drawCat: unit => unit = "draw"
@module("Drawing") external drawDog: (~giveName: string) => unit = "draw"
ReScriptJS Output
@val
external padLeft: (
  string,
  @unwrap [
    | #Str(string)
    | #Int(int)
  ])
  => string = "padLeft"

padLeft("Hello World", #Int(4))
padLeft("Hello World", #Str("Message from ReScript: "))

JS 模块互操作

查看这里

危险的类型转换

最后的逃生通道。请勿滥用。

ReScriptJS Output
external convertToFloat: int => float = "%identity"
let age = 10
let gpa = 2.1 +. convertToFloat(age)