如何最好地在Typescript中实现类型安全的对象查询表达式解析器?
我有一个定义良好的复杂对象,我的应用程序允许用户编写一个简单的DSL来隔离其中的值,就像这样,然后对这些值应用断言(创建测试)。“测试”示例可能是:如何最好地在Typescript中实现类型安全的对象查询表达式解析器?,typescript,parsing,reduce,Typescript,Parsing,Reduce,我有一个定义良好的复杂对象,我的应用程序允许用户编写一个简单的DSL来隔离其中的值,就像这样,然后对这些值应用断言(创建测试)。“测试”示例可能是: events.where(stage=read).logs[0] is "Hello world" 该应用程序是一个“游乐场”工具,允许人们设置一些配置,然后运行它,看看它是否达到了预期效果。测试特性允许他们断言预期的行为 因此,挑战在于定义一个签名如下的函数: parseTestQuery(queryExpr: string
events.where(stage=read).logs[0] is "Hello world"
该应用程序是一个“游乐场”工具,允许人们设置一些配置,然后运行它,看看它是否达到了预期效果。测试特性允许他们断言预期的行为
因此,挑战在于定义一个签名如下的函数:
parseTestQuery(queryExpr: string, rootObject: ComplexType): ResolvedTargetValue
目前,我通过在
和[\u]
和reduce()
上拆分查询表达式来实现这一点,并在每次回调时返回一个逐步加深的引用。但这意味着reduce
的签名基本上是(any):any
:
targetPath.split(/\.|(\[\d+\])\./).reduce((prev: any, thisToken: string): any => {
// The callback handles array accessors like `[1]` and
// aggregators like `.count()` etc but for simplicity...
return prev[thisToken];
}, rootObject);
我能做得更好吗?您将如何处理这种用例?根据经验,每次*使用
any
-您应该使用unknown
。根据经验,每次*使用any
-您应该使用unknown
。