A library for generating Typescript types that can be used transparently from Purescript.
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 };
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