You are currently looking at the v11.0 docs, which are still a work in progress. If you miss anything, you may find it in the older v10.0 docs here.
Generate Converters & Helpers
Note: if you're looking for:
@deriving(jsConverter)
for records@deriving({jsConverter: newType})
for records@deriving(abstract)
for records@deriving(jsConverter)
for plain and polymorphic variants
These particular ones are no longer needed. Select a doc version lower than 9.0
in the sidebar to see their old docs.
When using ReScript, you will sometimes come into situations where you want to
Automatically generate functions that convert between ReScript's internal and JS runtime values (e.g. variants).
Convert a record type into an abstract type with generated creation, accessor and method functions.
Generate some other helper functions, such as functions from record attribute names.
You can use the @deriving
decorator for different code generation scenarios. All different options and configurations will be discussed on this page.
Note: Please be aware that extensive use of code generation might make it harder to understand your programs (since the code being generated is not visible in the source code, and you just need to know what kind of functions / values a decorator generates).
Generate Functions & Plain Values for Variants
Use @deriving(accessors)
on a variant type to create accessor functions for its constructors.
Variants constructors with payloads generate functions, payload-less constructors generate plain integers (the internal representation of variants).
Note:
The generated accessors are lower-cased.
You can now use these helpers on the JavaScript side! But don't rely on their actual values please.
Usage
RESlet s = submit("hello"); /* gives Submit("hello") */
This is useful:
When you're passing the accessor function as a higher-order function (which plain variant constructors aren't).
When you'd like the JS side to use these values & functions opaquely and pass you back a variant constructor (since JS has no such thing).
Please note that in case you just want to pipe a payload into a constructor, you don't need to generate functions for that. Use the ->
syntax instead, e.g. "test"->Submit
.
Generate Field Accessors for Records
Use @deriving(accessors)
on a record type to create accessors for its record field names.