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

410
Vistas
Angular NgRx: obtenga claves de una interfaz dentro de la tienda como una matriz de cadenas

No estoy seguro de dónde debo poner mi código dentro de la tienda NgRx.

Así que tengo una tienda NgRx con un reductor como este (en su mayoría generado automáticamente con CLI):

 import { createReducer, on } from '@ngrx/store'; import { addTodo } from './todo.actions'; export const todosFeatureKey = 'todos'; export interface Todo { id: number, name: string, } export interface TodosState { todos: Todo[], } export const initialState: TodosState = { todos: [], }; export const todosReducer = createReducer( initialState, on(addTodo, (state, todo) => ({ ...state, todos: [...state.todos, todo ] })), );

Necesito obtener una matriz de cadenas que representen las claves de una interfaz de Todo. Como esto:

 const keysOfTodo: string[] = ??? console.log(keysOfTodo); // ['id', 'name']

Se hizo una pregunta similar aquí: Obtener claves de una interfaz Typescript como matriz de cadenas

Y seguí esta respuesta: https://stackoverflow.com/a/59806829/7214068

Y escribió algo como esto:

 class TodoClass { id = 0; name = ""; } interface Todo extends TodoClass { }; const keysOfTodo = Object.keys(new TodoClass ()) as (keyof TodoClass )[]; console.log(keysOfTodo); // ['id', 'name']

Pero mi pregunta es: ¿dónde debo poner este código dentro de la tienda NgRx?


Mi intuición fue que debería poner esta clase auxiliar dentro de mi archivo reducer.ts junto con la interfaz. Y luego podría declarar const keysOfTodo a pedido donde lo necesite.

Pero luego pensé que probablemente debería convertirla en una función reutilizable e inmediatamente pensé en los selectores NgRx. Sin embargo, esto (aunque funciona) no parece del todo correcto.

 import { createSelector } from "@ngrx/store"; import { AppState } from "../app.state"; import { Todo, TodoClass, TodosState } from "./todo.reducer"; export const selectTodos = (appState: AppState) => appState.todos; export const selectAllTodos = createSelector( selectTodos, (state: TodosState) => state.todos, ); export const selectTodoKeys = () => Object.keys(new TodoClass()) as (keyof Todo)[]; export const selectAllTodoKeys = createSelector(selectTodoKeys);

Keys of Todo probablemente no sea algo que cambie durante el tiempo de ejecución, por lo que realmente no creo que deba ser reactivo. Pero aparte de los selectores, no sé dónde debo poner esa función. ¿Tal vez debería crear un archivo separado para almacenar solo tipos? ¿O simplemente exportarlo directamente dentro de un archivo reductor? ¿Qué piensas? ¿Cuál es el enfoque típico de NgRx?

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