Skip to content

ocsigen/ts2ocaml

Repository files navigation

ts2ocaml

npm latest version npm latest version

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.
  • 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 or T 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.

Documentation

For users:

For developers and contributors:

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.