代码之家  ›  专栏  ›  技术社区  ›  Daniel Kaplan

为什么VS Code/TypeScript不能识别Regex结果的index属性。执行官?

  •  0
  • Daniel Kaplan  · 技术社区  · 4 年前

    exec documentation ,它说应该存在一个名为 indices :

    一个数组,其中每个条目代表一个子串匹配。每个子字符串匹配本身就是一个数组,其中第一个条目表示其开始索引,第二个条目表示其结束索引。 Indexes数组还有一个groups属性,它保存所有命名捕获组的对象。键是捕获组的名称,每个值都是一个数组,第一项是捕获组的开始项,第二项是捕获组的结束索引。如果正则表达式不包含任何捕获组,则组是未定义的。

    Here is my code :

      const ex = / ([a-z])/dg.exec(
        "a b c d e f"
      );
      if (ex) {
        const x = ex.indices; // Error! Property 'indices' does not exist on type 'RegExpExecArray'.
      }
    

    我觉得我错过了一些非常明显的东西。为什么这个不能编译,我怎么才能编译呢?

    1 回复  |  直到 4 年前
        1
  •  3
  •   CertainPerformance    4 年前

    增加 .indicies 是 pretty new -不到一年前,它才进入TC39流程的第4阶段,TypeScript还没有集成它。那里 is an open issue 在TS github上添加 .指标 ,但还没有修好。

    简而言之,如果你想 只是工作 ,你将不得不等待,直到有人将这个新功能贡献给打字脚本。

    当然,你可以自己定义一个类型,并使用 as 断言:

    type RegExpMatchArrayWithIndices = RegExpMatchArray & { indices: Array<[number, number]> };
    
    const ex = / ([a-z])/dg.exec(
        "a b c d e f"
    );
    if (ex) {
        const x = (ex as RegExpMatchArrayWithIndices).indices;
    }