使用Babel等将运行时类型检查添加到Javascript

时间:2018-02-03 02:26:10

标签: javascript babeljs transpiler

我想使用像Babel(或类似工具)这样的工具为javascript添加自定义类型,以便在语言中添加运行时类型和许多其他基本错误检查,但是我只有基本的问题才能获得一个基本的例子来工作

我尝试过使用正则表达式解析解决方案,但它会导致许多问题,因为它无法理解代码的哪些部分被注释掉等。

我尝试过使用各种AST生成器,但是我没有成功修改它们以适应下面的特定语法。

我最好喜欢使用babel转换/转换它:

function testFunction(a:integer:>10, b:string:not-empty) {
        
    var test:boolean = true

    return string:`string is ${b} and integer is ${a} and boolean is ${test}`
}

进入这个

function testFunction(a,b) {
    if (!Number.isInteger(a)) {
        throw new Error('param a on testFunction must be an integer')
    }

    if (a > 10 === false) {
        throw new Error('integer a must be greater than 10')
    }

    if (typeof b !== 'string') {
        throw new Error('param b on testFunction must be a string')
    }

    if (b === '') {
        throw new Error('string b cant be empty')
    }

    var test = true
    if (typeof test !== 'boolean') {
        throw new Error('variable test must be of type boolean')
    }

    var returnValue = `string is ${b} and integer is ${a} and boolean is ${test}`
    if (typeof returnValue !== 'string') {
        throw new Error('return value must be of type string')    
    }
    return returnValue
}

我想构建一个自定义类型检查库,所以我不想在现有的类型库(如typescript)之上构建它

1 个答案:

答案 0 :(得分:0)

Babel不支持添加自定义语法扩展,例如

function fn(a:integer:>10, b:string:not-empty){}

不可行。您可以随时探索使用其他注释来注释边界和大小期望等内容。

那就是说,flow-runtime听起来很合适,并为你所阐述的事情实施解决方案。它支持通过flow-runtime-validators包添加运行时约束。