Skip to content
A library for generating Typescript types that can be used transparently from Purescript.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
test
.gitignore
.travis.yml
LICENSE
README.md
bower.json
package.json

README.md

Purescript-OhYes

Build Status

A library for generating Typescript types that can be used transparently from Purescript.

See the blog post here: https://github.com/justinwoo/my-blog-posts#you-can-interop-with-typescript-using-purescript-ohyes

This is likely not the "silver bullet" that you are looking for, but can give you some good ideas on how to get going.

This library also provides ways for working with typical union type forms of records with a discriminant field by using Variant, which uses a record representation with a string literal type field and the associated value field.

export type VariantTest =
  | { type: "a", value: string }
  | { type: "b", value: number }
  | { type: "c", value: boolean };

Example

The tests generate types and write them to a file, which is then checked with Typescript using test/test.ts:

type A =
  { a :: Number
  , b :: String
  , c :: { d :: String }
  , e :: Array String
  , f :: Nullable String
  , g :: Number -> Number -> Number
  , h :: Fn2 Number Number Number
  , i :: Fn2 Number (Fn2 Number Number Number) Number
  }

type VariantTest = Variant
  ( a :: String
  , b :: Number
  , c :: Boolean
  )

generateTSFile :: _
generateTSFile = writeTextFile UTF8 "./test/generated.ts" values
  where
    values = format defaultOptions $ intercalate "\n"
      [ generateTS "A" (Proxy :: Proxy A)
      , generateTS "VariantTest" (Proxy :: Proxy VariantTest)
      ]

Generated types:

export type A = {
  a: number,
  b: string,
  c: { d: string },
  e: string[],
  f: string | null,
  g: (a: number) => (a: number) => number,
  h: (a: number, b: number) => number,
  i: (a: number, b: (a: number, b: number) => number) => number
};
export type VariantTest =
  | { type: "a", value: string }
  | { type: "b", value: number }
  | { type: "c", value: boolean };

See the additional example here: https://github.com/justinwoo/ohyes-demo

You can’t perform that action at this time.