Существуют ли сценарии или инструменты для автоматической миграции Flow на TypeScript? - PullRequest
0 голосов
/ 16 марта 2020

У меня есть старый реактивный модуль, использующий Flow. Есть несколько тысяч строк кода. Теперь я хотел бы перенести эти коды в новый проект, используя TypeScript. Я ищу автоинструмент, который поможет мне решить утомительные работы по преобразованию типов. Если бы это решило около 90% проблем, я был бы признателен. Например,

  • Изменение всего файла .js на файл ts или tsx, например:
for f in `find . -type f -name '*.js'`;
do
git mv -- "$f" "${f%.js}.ts"
done
  • преобразование типов
// Flow
import type { Type1, Type2 } from ./dir/to/path
// Typescript
import { Type1, Type2 } from ./dir/to/path
// Flow
type Date = {
  toString: () => string,
  setTime: (time: number) => number
}

// TypeScript
interface Date {
  toString(): string;
  setTime(time: number): number;
}

// Flow 
value: ?string 
// TypeScript 
value: string | null

Есть предложения?


Наконец-то я использовал flow-to-ts

yarn global add @khanacademy/flow-to-ts
flow-to-ts --write --delete-source ${myProjectPath}/src/**/**.js

Есть и другие варианты:

Usage: flow-to-ts [options]

Options:
  -V, --version                    output the version number
  --inline-utility-types           inline utility types when possible, defaults to 'false'
  --prettier                       use prettier for formatting
  --semi                           add semi-colons, defaults to 'false' (depends on --prettier)
  --single-quote                   use single quotes instead of double quotes, defaults to 'false' (depends on --prettier)
  --tab-width [width]              size of tabs (depends on --prettier) (default: 4)
  --trailing-comma [all|es5|none]  where to put trailing commas (depends on --prettier) (default: "all")
  --bracket-spacing                put spaces between braces and contents, defaults to 'false' (depends on --prettier)
  --arrow-parens [avoid|always]    arrow function param list parens (depends on --prettier) (default: "avoid")
  --print-width [width]            line width (depends on --prettier) (default: 80)
  --write                          write output to disk instead of STDOUT
  --delete-source                  delete the source file
  -h, --help                       output usage information
...