[Babel] babel-preset-jsdoc-to-assert で JSDoc から assertion を自動生成する
babel env option を利用して、開発時に jsdoc-to-assert させる。
ESLintで静的にJSDocのコメントをチェックできるvalid-jsdocとbabel-plugin-jsdoc-to-assertを合わせて使うようなイメージで書いています。
インストール
preset をインストールする。
% npm install --save-dev babel-preset-jsdoc-to-assert
.babelrc に jsdoc-to-assert を設定する。
{
"presets": [
"es2015"
],
"env": {
"development": {
"presets": [
"power-assert",
"jsdoc-to-assert"
]
},
"production": {
"plugins": [
"babel-plugin-unassert"
]
}
}
}
実行
前回までは、assert を直接 lib ファイルに書いた状態だった。
上述のサンプルコードであれば、下記3行が不要になる。
const assert = require('assert');
assert(typeof x === 'number');
assert(typeof y === 'number');
DriftwoodJP/sandbox-es6 であれば、BABEL_ENV=development babelify
のような形でオプションを渡せば、jsdoc-to-assert が有効となる。
以下が生成された。
if (!(typeof x === "number")) {
console.assert(typeof x === "number", 'Expected type: @param {number} x\nActual value:', x, '\nFailure assertion: typeof x === "number"');
}
if (!(typeof y === "number")) {
console.assert(typeof y === "number", 'Expected type: @param {number} y\nActual value:', y, '\nFailure assertion: typeof y === "number"');
}
以下にまとめた。
補遺
JavaScript の型チェックといえば Flow や TypeScript だが、前者は型の定義ファイルが必要で、後者は言語自体を拡張しているため導入コストが少々、高い。