Búsqueda de sitios web

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