Constraints en los miembros de la interfaz en genéricos mecanografiados
Tengo un método que debería aceptar cualquier objeto, siempre que todos sus campos sean cadenas o números
He hecho esto, lo que funciona muy bien con pato escribiendo
static interpolateParams(
route: string,
params: {[key: string] : string | number}) : string {
const parts = route
.split("/")
.map(part => {
const match = part.match(/:([a-zA-Z09]*)\??/);
if (match) {
if (!params[match[1]]) {
console.error("route argument was not provided", route, match[1]);
return part;
}
return params[match[1]];
}
else {
return part;
}
})
return "/" + parts.slice(1).join("/");
}
y llam
interpolateParams("/api/:method/:value", {method: "abc", value: 10});
Ahora quiero hacerinterpolateParams
para aceptar cualquier interfaz para la rutaparams
.
interpolateParams<IABCParams>("/api/:method/:value", {method: "abc", value: 10});
Problema es que aún debe coincidir con las restricciones para todos los campos que son cadenas o números
¿Hay alguna manera de especificar la restricción genérica en todos los campos de la interfaz dada para que sea de cierto tipo?
Intenté que
static interpolateParams<T extends {[key: string] : string | number}>(
route: string,
params: T) : string {
y obviamente obtuve este
Type 'IABCParams' no cumple la restricción '{[clave: cadena]: cadena | número; } '.
alta la firma @Index en el tipo 'IABCParams'.
Gracia