Skip to content

Generate OCaml bindings from TypeScript definitions via the TypeScript compiler API

License

Notifications You must be signed in to change notification settings

joelburget/ts2ocaml

 
 

Repository files navigation

ts2ocaml

npm latest version

Generate OCaml bindings from TypeScript definitions via the TypeScript compiler API.

Installation

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.

About

Generate OCaml bindings from TypeScript definitions via the TypeScript compiler API

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • F# 99.5%
  • Other 0.5%