Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

354
Vistas
Tipos genéricos de mecanografiado para la función que está actualizando el objeto anidado

Estoy creando una función genérica que permitirá actualizar las propiedades de los objetos anidados (idealmente en función del tipo inferido, pero es bueno tenerlo en lugar de un requisito).

Además de eso, tenga en cuenta: no soy un experto en mecanografiado, por lo que me complacería señalar cualquier error.

Así que aquí está el estado de ejemplo + tipos para ello:

 type DataType = { knownKeyName1: { knownNestedKeyName1: string knownNestedKeyName2: string knownNestedKeyName3: string knownNestedKeyName4: string } knownKeyName2: { knownNestedKeyName1: string knownNestedKeyName2: string knownNestedKeyName3: string } } type SomeState = { data: DataType } const someState: SomeState = { data: { knownKeyName1: { knownNestedKeyName1: 'value', knownNestedKeyName2: 'value', knownNestedKeyName3: 'value', knownNestedKeyName4: 'value' }, knownKeyName2: { knownNestedKeyName1: 'value', knownNestedKeyName2: 'value', knownNestedKeyName3: 'value' } } }

Y debajo está la función que ya intenté construir con los genéricos de Typescript:

 const setStateValue = < State extends { data: unknown }, // I want this to infer type from `someState` variable whenever I pass it to this function Prop extends [keyof State['data']], VarName extends keyof State['data'][Prop] // Type 'Prop' cannot be used to index type 'State["data"]'.ts(2536) >( state: State, prop: Prop, varName: VarName, newValue: string ): void => { state.data[prop][varName] = newValue // Example usage should results with: // state.data[knownKeyName1][knownNestedKeyName3] = 'someNewValue' }

Equivalente de JavaScript:

 const setStateValue = (state, prop, varName, newValue) => { state.data[prop][varName] = newValue // Object property reassignment is done on purpose because we want to update the state in reducer with `immer` }

¿Algunas ideas? Además, si eso no es posible, sería bueno tener al menos algo como esto:

 const setStateValue = < State extends { data: DataType }, Prop extends keyof DataType, VarName extends keyof DataType[Prop] >( state: State, prop: Prop, varName: VarName, newValue: string ): void => { state.data[prop][varName] = newValue // but then this error pops out: // Type 'string' is not assignable to type 'DataType[Prop][VarName]'.ts(2322) }

¡Gracias por adelantado!

PD Agregando la etiqueta #redux-toolkit para dar un poco de contexto de uso, ya que quiero usar esta función setStateValue dentro del reductor genérico (para que el estado se pueda mutar con immer).

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda