Global JS Values

@val, @scope

type immediateId
@val external setImmediate: (float => unit, float) => immediateId = "setImmediate"
@val external clearImmediate: immediateId => unit = "clearImmediate"
// usage
let id = setImmediate(x => Js.log(x), 101.101)
clearImmediate(id)

@val @scope("Math")
external pi : float = "PI"
pi->Js.log
// or
@val external py : float = "Math.PI"
py->Js.log

@val @scope(("window", "localStorage"))
external clear: unit => unit = "clear"
clear()
// js => window.localStorage.clear()
// Or 
@val external localStorageClear: unit => unit = "localStorage.clear"
localStorageClear()
// js => localStorage.clear()

@val external is: ('a, 'b) => bool = "Object.is"
is(1,2)->Js.log
// Or
@val @scope("Object")
external is: ('a, 'b) => bool = "is"
is(Js.Float._NaN, Js.Float._NaN)->Js.log

Special global values %external

switch %external(__DEV__) {
| Some(_) => Js.log("dev mode")
| None => Js.log("production mode")
}

switch %external(__filename) {
| Some(f) => Js.log(f)
| None => Js.log("non-node environment")
};