Necesito asegurarme de que un objeto solo tenga claves que sigan un patrón. Ese patrón i: "{entero}a+{entero}c". Se vería como:
{ "2a+1c": { // ... } }¿Cómo puedo asegurarme de que cualquier clave nueva agregada a este objeto siga este patrón, sin exponer todas las claves posibles (ya que no es factible)?
Para quizás arrojar algo de luz sobre lo que estoy pensando, así es como puede asegurarse de que un objeto solo tenga claves que pertenezcan a una enumeración:
type ObjectWithEnumedKeys = { [key in TheEnum]?: number; }No estoy buscando una solución que use lógica (métodos en una clase o un cierre) para controlar esto.
¿Hay alguna manera de escribir un objeto de manera que sus claves solo puedan ser cadenas que coincidan con un Regex dado?
No.
TypeScript 4.4 introdujo el uso de tipos de plantilla literal en firmas de índice. Si bien actualmente permiten cualquier número, no solo números enteros, en las interpolaciones, no es exactamente lo que solicitó, pero se acerca mucho:
type TheEnum = `${number}a+${number}c`; type ObjectWithEnumedKeys = { [key in TheEnum]?: number; } const x: ObjectWithEnumedKeys = { "2a+1c": 3, // works as expected "5.5a+3.1c": 8.6, // accepted as well, hm "error": undefined, // complains that "property 'error' does not exist in type 'ObjectWithEnumedKeys'", as expected }( Demostración en Playground )
Los tipos de cadena validados por expresiones regulares que le permitirían especificar correctamente los coeficientes enteros aún están en discusión.