Home

Awesome

Flow-to-TypeScript Build Status npm mit

Compile Flow files to TypeScript

In Pre-Alpha - contributions welcome.

Installation

# Using Yarn:
yarn add flow-to-typescript

# Or, using NPM:
npm install flow-to-typescript --save

Usage

CLI

# Install globally
yarn global add flow-to-typescript

# Compile a file (all of these are equivalent)
flow2ts my/file.js.flow
flow2ts my/file.js.flow my/file.ts
flow2ts my/file.js.flow > my/file.ts
flow2ts -i my/file.js.flow -o my/file.ts
flow2ts --input my/file.js.flow --output my/file.ts

Programmatic

import { compile } from 'flow-to-typescript'
import { readFileSync, writeFileSync } from 'fs'

let path = 'path/to/file.js.flow'
let file = readFileSync(path, 'utf-8')

compile(file, path).then(ts =>
  writeFileSync('path/to/file.ts', ts)
)

TypeScript vs. Flow

Features

Done?FlowTypeScript
Maybe?type (NullableTypeAnnotation)type | null | undefined
Nullnullnull
Undefinedtypeof undefinedundefined
Mixedmixedunknown
Voidvoidvoid
Functions(A, B) => C(a: A, b: B) => C
Predicates (0)(a: A, b: B) => %checks(a: A, b: B) => C
Predicates (1)(a: A, b: B) => C %checks(a: A, b: B) => C
Exact types{| a: A |}{ a: A }
Indexers{ [A]: B }{ [a: A]: B }
Opaque typesopaque type A = Btype A = B (not expressible)
Varianceinterface A { +b: B, -c: C }interface A { readonly b: B, c: C }
Bounds<A: string><A extends string>
Casting(a: A)(a as A)
Import default typeimport type A from './b'import A from './b'
Import named typeimport type { A } from './b'import { A } from './b'

Utilities

Done?FlowTypeScript
Keys$Keys<A>keyof A
Values$Values<A>A[keyof A]
ReadOnly$ReadOnly<A>Readonly<A>
Exact$Exact<A>A
Difference$Diff<A, B>TODO`
Rest$Rest<A, B>Exclude
Property type$PropertyType<T, k>T[k]
Element type$ElementType<T, K>T[k]
Dependent type$ObjMap<T, F>TODO
Mapped tuple$TupleMap<T, F>TODO
Return type$Call<F>ReturnType
ClassClass<A>typeof A
Supertype$Supertype<A>any (warn - vote for https://github.com/Microsoft/TypeScript/issues/14520)
Subtype$Subtype<A>B extends A
Existential type*any (warn - vote for https://github.com/Microsoft/TypeScript/issues/14466)

✅ Done

⚔ Babylon doesn't support it (yet)