javascript - ¿Por qué VS Code/TypeScript no reconoce la propiedad indices en el resultado de Regex.exec?
TL;DR: Esto se compila ahora. Ve la actualización a continuación.
Si miras esta documentación de exec, dice que debería existir una propiedad llamada indices:
Un array donde cada entrada representa una coincidencia de subcadena. Cada coincidencia de subcadena es a su vez un array donde la primera entrada representa su índice de inicio y la segunda entrada su índice de fin. El array de índices adicionalmente tiene una propiedad groups que contiene un objeto con todos los grupos de captura con nombre. Las claves son los nombres de los grupos de captura y cada valor es un array con el primer elemento siendo el índice de inicio y el segundo elemento el índice de fin del grupo de captura. Si la expresión regular no contiene ningún grupo de captura, groups es undefined.
Aquí está mi código:
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'.
}
Siento como si me estuviera perdiendo algo realmente obvio. ¿Por qué no se compila esto y cómo puedo lograr que lo haga?
Actualizar
Mi código original daba error, pero no da error en TypeScript v5.x.x. El enlace de arriba "Aquí está mi código" siempre utiliza el compilador más reciente, y si haces clic en él, notarás que ya no hay error de compilación.
Respuesta #1
La propuesta que añadió .indicies es bastante nueva: solo avanzó a la Etapa 4 en el proceso TC39 hace menos de un año, y TypeScript aún no la ha integrado. Hay un problema abierto en el github de TS para añadir .indicies, pero aún no se ha solucionado.
En resumen, si quieres que esto simplemente funcione, tendrás que esperar hasta que alguien contribuya con esta nueva función a los tipos de TypeScript.
Por supuesto, podrías definir un tipo tú mismo y usar as para afirmar:
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;
}
