ts2ocaml
ts2ocaml copied to clipboard
Generate OCaml bindings from TypeScript definitions via the TypeScript compiler API
ts2ocaml
Generate OCaml bindings from TypeScript definitions via the TypeScript compiler API.
Installation
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.
Overview
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 TorT 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
Documentation
For users:
- Common options among all the targets
- ts2ocaml for js_of_ocaml
- ts2ocaml for ReScript
For developers and contributors:
- Overview for developers
- Note on modeling TS subtyping in OCaml
About this tool
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.