Raw JS
let add = %raw("(a, b) => a + b")%%raw("const a = 1")
var add = (a, b) => a + b;const a = 1;
Global Value
@bs.val external setTimeout: (unit => unit, int) => float = "setTimeout"
// Empty output
Global Module's Value
@bs.val @bs.scope("Math")external random: unit => float = "random"let someNumber = random()@bs.val @bs.scope(("window", "location", "ancestorOrigins"))external length: int = "length"
var someNumber = Math.random();
Nullable
let a = Some(5) // compiles to 5let b = None // compiles to undefined
var a = 5;var b;
option
유형이 아닌 Js.Nullable.t
를 사용하므로써, undefined
과 null
이 될수 있는 값들을 처리합니다
let jsNull = Js.Nullable.nulllet jsUndefined = Js.Nullable.undefinedlet 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))
var Caml_option = require('./stdlib/caml_option.js');var Js_null_undefined = require('./stdlib/js_null_undefined.js');var jsNull = null;var jsUndefined;var result1 = 'hello';var result2 = Js_null_undefined.fromOption(10);var result3 = Caml_option.nullable_to_opt(10);
자바스크립트 객체
함수
Object Method & Chaining
@bs.send external map: (array<'a>, 'a => 'b) => array<'b> = "map"@bs.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
console.log([1, 2, 3].map(function(a) {return (a + 1) | 0;}).filter(function(a) {return a % 2 === 0;}));
가변 인수
@bs.module("path") @bs.variadicexternal join: array<string> => string = "join"
// Empty output
다형성 함수
@bs.module("Drawing") external drawCat: unit => unit = "draw"@bs.module("Drawing") external drawDog: (~giveName: string) => unit = "draw"
// Empty output
@bs.valexternal padLeft: (string,@bs.unwrap [| #Str(string)| #Int(int)])=> string = "padLeft"padLeft("Hello World", #Int(4))padLeft("Hello World", #Str("Message from ReScript: "))
padLeft('Hello World', 4);padLeft('Hello World', 'Message from ReScript: ');
자바스크립트 모듈의 상호 운용성
Dangerous Type Cast
이 변환 방식은 최후의 보루입니다! 남용하지 마세요
external convertToFloat: int => float = "%identity"let age = 10let gpa = 2.1 +. convertToFloat(age)
var age = 10;var gpa = 2.1 + 10;
List of @bs Decorators
@bs.as
@bs.get
@bs.get_index
@bs.inline
@bs.int
@bs.meth
@bs.module
@bs.new
@bs.return
@bs.scope
@bs.send
@bs.set
@bs.set_index
@bs.string
@bs.this
@bs.uncurry
@bs.unwrap
@bs.val
@bs.variadic