Flow-to-TypeScript

将 Flow 标注的文件转换为 TypeScript。「Convert Flow-annotated files to TypeScript」

Github stars Tracking Chart

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? Flow TypeScript
Maybe ?type (NullableTypeAnnotation) type | null | undefined
Null null null
Undefined typeof undefined undefined
Mixed mixed unknown
Void void void
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 types opaque type A = B type A = B (not expressible)
Variance interface 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 type import type A from './b' import A from './b'
Import named type import type { A } from './b' import { A } from './b'

Utilities

Done? Flow TypeScript
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
Class Class<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)

Overview

Name With Ownerbcherny/flow-to-typescript
Primary LanguageTypeScript
Program languageTypeScript (Language Count: 2)
Platform
License:MIT License
Release Count0
Created At2017-11-29 07:56:14
Pushed At2022-12-06 19:59:19
Last Commit At2019-02-18 16:15:48
Stargazers Count429
Watchers Count15
Fork Count47
Commits Count46
Has Issues Enabled
Issues Count11
Issue Open Count7
Pull Requests Count3
Pull Requests Open Count12
Pull Requests Close Count5
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private
To the top