Flow를 일반 JavaScript로 변환 — Numio
Babel의 flow-strip-types 플러그인으로 Flow 타입 주석을 제거해 일반 JavaScript를 만듭니다. 타입 전용 import와 타입 별칭은 제거되고, 이후 페이지가 Prettier로 결과를 포맷합니다.
프로젝트에서 Flow를 걷어내는 중이고, TypeScript로 옮길지 정하기 전에 먼저 일반 JavaScript를 얻고 싶을 때.
Flow
JavaScript
처리는 브라우저에서 로컬로 실행되며 입력은 업로드되지 않습니다. 같은 탭에서 도구를 바꿔도 입력이 남을 수 있으니 공용 기기에서는 사용 후 지워 주세요.
이럴 때 사용하세요
- 프로젝트에서 Flow를 걷어내는 중이고, TypeScript로 옮길지 정하기 전에 먼저 일반 JavaScript를 얻고 싶을 때.
- Flow 타입이 붙은 코드 조각을 브라우저 콘솔이나 codepen처럼 표준 JavaScript만 받는 곳에 붙여 넣어야 할 때.
사용 방법
- Flow 패널에 Flow 주석이 달린 코드(// @flow 헤더 유무와 관계없음)를 붙여 넣습니다.
- 코드는 /api/flow-to-javascript로 전송되고, recast가 Flow 파서로 파싱한 뒤 Babel이 타입을 제거합니다.
- 출력 패널에서 JavaScript를 복사합니다.
Flow
// @flow
import type { Store } from './store';
import { createStore } from './store';
type State = { count: number };
export function first<T>(items: Array<T>): ?T {
return items.length ? items[0] : null;
}
const store: Store<State> = createStore(({ count: 0 }: State));
export default store;JavaScript
import { createStore } from "./store"
export function first(items) {
return items.length ? items[0] : null
}
const store = createStore({
count: 0,
})
export default store세부 정보 및 제한 사항
입력은 변환을 위해 서버 라우트(/api/flow-to-javascript)로 전송되며, 브라우저에서만 처리되지 않습니다. Next.js API 라우트는 기본적으로 최대 1 MB의 요청 본문을 받습니다.
타입만 제거됩니다. JSX, ??, 클래스 필드 같은 최신 문법은 트랜스파일되지 않습니다.
결과는 Prettier로 다시 포맷되므로(큰따옴표, 세미콜론 없음) 원래 스타일은 유지되지 않으며, ({ count: 0 }: State) 같은 타입 캐스트는 불필요한 괄호가 사라집니다.
제거되는 타입 선언에 붙어 있던 // @flow 주석도 함께 제거됩니다.
FAQ
JSX는 유지되나요?
네. JSX는 파싱된 뒤 그대로 출력되므로, 결과를 실행하려면 여전히 JSX 변환이 필요합니다.
import type 문은 어떻게 되나요?
완전히 제거됩니다. 일반 import는 그대로 남습니다.
출력을 실행하려면 Flow나 Babel이 필요한가요?
Flow는 필요 없습니다. 입력에 JSX나 새 문법이 있다면 런타임이나 번들러가 이를 지원해야 합니다.