Конвертировать Flow в типы TypeScript — Numio
Преобразует код с типами Flow в TypeScript с помощью flow-to-ts от Khan Academy. Maybe-типы (?T) становятся T | null | undefined, точные объекты — обычными объектными типами, а $ReadOnlyArray — ReadonlyArray.
Вы переносите кодовую базу с Flow на TypeScript файл за файлом и хотите получить первый вариант для каждого модуля.
Flow
TypeScript
Когда пригодится
- Вы переносите кодовую базу с Flow на TypeScript файл за файлом и хотите получить первый вариант для каждого модуля.
- Фрагмент с типами Flow из старого React-проекта нужно вставить в кодовую базу на TypeScript.
Как пользоваться
- Вставьте код Flow в панель Flow.
- Он отправляется на /api/flow-to-typescript и конвертируется на сервере с помощью flow-to-ts; настроек нет.
- Скопируйте TypeScript, сохраните как .ts или .tsx и запустите tsc, чтобы исправить то, что конвертация не смогла перевести.
Flow
// @flow
import type { Node } from 'react';
export type User = {|
+id: number,
name: ?string,
roles: $ReadOnlyArray<string>,
|};
export function greet(user: User): string {
return `Hi ${user.name ?? 'guest'}`;
}
export const render = (title: string): Node => null;TypeScript
import type { Node } from "react"
export type User = {
readonly id: number
name: string | null | undefined
roles: ReadonlyArray<string>
}
export function greet(user: User): string {
return `Hi ${user.name ?? "guest"}`
}
export const render = (title: string): Node => nullПодробности и ограничения
Страница отправляет ваши данные на серверный маршрут (/api/flow-to-typescript) для конвертации; они обрабатываются не только в браузере. API-маршруты Next.js по умолчанию принимают тело запроса размером до 1 МБ.
Точные объектные типы {| |} теряют точность, потому что в TypeScript нет точных объектов, а +prop становится readonly.
Служебные типы Flow вроде $ReadOnly и $Keys сохраняют имена и импортируются из npm-пакета utility-types, который затем нужно установить.
Прагма // @flow удаляется, а код печатается заново. Импорты типов React вроде Node остаются как написаны, поэтому переименуйте их сами (например, в ReactNode).
FAQ
Как конвертируются maybe-типы?
name: ?string становится name: string | null | undefined. Необязательное свойство (name?: T) остаётся необязательным.
Конвертируются ли файлы с JSX?
Да. JSX сохраняется, поэтому сохраните результат как .tsx.
Можно ли получить .d.ts вместо полного кода?
Не на этой странице. Flow to TypeScript Declaration использует тот же серверный маршрут с declarationOnly, чтобы выводить только объявления.