Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

350
Visualizações
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 à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda