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

416
Visualizações
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 à 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