Generate OCaml bindings from TypeScript definitions via the TypeScript compiler API.
Try out v2 beta!
npm install -g @ocsigen/ts2ocaml@beta
npm install -g @ocsigen/ts2ocaml
Or if you are using yarn:
yarn global add @ocsigen/ts2ocaml
An in-browser version may be available in future.
Goals:
- Provide a way to quickly generate a missing binding to some JS package you need in your project.
- This tool can generate OCaml bindings to JS packages from TS definition files (
.d.ts
), which you can use with minimal modification.
- This tool can generate OCaml bindings to JS packages from TS definition files (
- Help library authors by reducing the amount of boilerplate code they have to write by hand.
- This tool can be configured to generate an imperfect but simpler version of bindings, which you can easily modify to create a better binding library.
Non-goals:
- Generate a binding written in 100% OCaml-idiomatic way.
- OCaml has very different programming concepts from TypeScript, so it's not very straightforward to translate TypeScript's concepts to OCaml's one.
- This tool will simply generate bindings which closely resembles the original TypeScript definitions. It's human's job to translate it to OCaml-idiomatic API.
- Perfectly replicate TypeScript's type system in OCaml.
- Many of the advanced types in TypeScript, such as
keyof T
orT extends U ? A : B
, are simply impossible to simulate in OCaml. - In those cases, this tool will leave them as untyped. It's also human's job to (possibly) restore type safety with some other means.
- Many of the advanced types in TypeScript, such as
For users:
- Common options among all the targets
- ts2ocaml for js_of_ocaml
- ts2ocaml for ReScript
For developers and contributors:
This tool is heavily inspired by fable-compiler/ts2fable, which generates Fable (F# AltJS) bindings from TS definition files.
This tools is licensed under the Apache License 2.0.