Bootstrap typed JavaScript projects in less than a minute or easily add types to untyped code. Built around Babel 7, Flow, babel-preset-env and functional type syntax.
The tool is written using itself, so have a look at its own code if you are interested. type-check.js is quite a good example, for instance.
I wanted to play a little with Hindley-Milner types in JavaScript, see how it feels and by the way reduce the boilerplate necessary to get starting with typed JavaScript.
yarn add --dev @andywer/gear
or using npm
npm install --save-dev @andywer/gear
{
"scripts": {
"build": "gear compile src/ -d lib/",
"test": "gear type-check src/"
}
}
# Run Babel
gear compile src/ -d lib/
# Run Babel & Flow
gear type-check src/
Will create a .flowcheck
directory, babel the sources, but not completely, just translating the custom type syntax Flow does not understand. Creates a .flowconfig
and runs Flow.
You can write JS code with Flow's regular type syntax, with Hindley-Milner types or without types (Flow will infer types as good as possible).
Gimmick: When writing Hindley-Milner types (functional style) you don't need to add // @flow
to the file. It will automatically be added on first encounter of a type.
exists :: string => Promise<bool>
/** Checks if a file or directory exists */
async function exists (path) {
try {
await fs.access(path)
return true
} catch (error) {
return false
}
}
Because TypeScript is kind of a closed ecosystem on its own and Flow is written in OCAML. Gear tries to stick to the tech stack you already have as much as possible.
And thus the stack becomes easily hackable.
Write a Babel plugin, even change the type syntax and it will work. And it even requires little effort to use it with real-world code since it is built around the tools you use anyway.
Released under the terms of the MIT license.