Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

409
Views
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
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!