如何最好地在Typescript中实现类型安全的对象查询表达式解析器?

如何最好地在Typescript中实现类型安全的对象查询表达式解析器?,typescript,parsing,reduce,Typescript,Parsing,Reduce,我有一个定义良好的复杂对象,我的应用程序允许用户编写一个简单的DSL来隔离其中的值,就像这样,然后对这些值应用断言(创建测试)。“测试”示例可能是: events.where(stage=read).logs[0] is "Hello world" 该应用程序是一个“游乐场”工具,允许人们设置一些配置,然后运行它,看看它是否达到了预期效果。测试特性允许他们断言预期的行为 因此,挑战在于定义一个签名如下的函数: parseTestQuery(queryExpr: string

我有一个定义良好的复杂对象,我的应用程序允许用户编写一个简单的DSL来隔离其中的值,就像这样,然后对这些值应用断言(创建测试)。“测试”示例可能是:

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