Typescript - ¿Nombres de claves dinámicas en un objeto? ¿Usando literal de plantilla?
¿Es algo como lo siguiente posible?
type test = <T extends string>(key: T, object: { [`${T}`]: number }) => void
^^^^^^^^
Sé que podemos establecer valores literales de tipo usando esa sintaxis, pero he estado jugando con ello y no parece que pueda hacerlo con claves.
Sin embargo, lógicamente, siento que debería ser posible dado que las teclas mapeadas usando as son posibles...
¿Alguien tiene alguna idea sobre esto?
Respuesta #1
Puedes usar Record<T, number> (lo recomiendo) o el uso clásico:
type test = <T extends string>(key: T, object: { [K in T]: number }) => void
Los objetos de tipo no funcionan igual que los objetos de JS.
EDITAR
para más campos, usa el operador & (fusionar):
type test = <T extends string>(key: T, object: { [K in T]: number } & {foo: "bar"}) => void
o (mejor)
type test = <T extends string>(key: T, object: Record<T, number> & {foo: "bar"}) => void
