我想使用像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)之上构建它
答案 0 :(得分:0)
Babel不支持添加自定义语法扩展,例如
function fn(a:integer:>10, b:string:not-empty){}
不可行。您可以随时探索使用其他注释来注释边界和大小期望等内容。
那就是说,flow-runtime
听起来很合适,并为你所阐述的事情实施解决方案。它支持通过flow-runtime-validators
包添加运行时约束。