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

181
Visualizações
TS dice que la propiedad del objeto no existe mientras muestra que sí

Tengo un problema en el que recibo un mensaje de error sobre el valor de retorno de una función tachada, que se burla del retorno de un Observable (usando rxjs-marbles ).

El problema que tengo es que el mensaje de error parece indicar que una propiedad de un objeto no existe en el tipo de devolución.

Desde el archivo de prueba de la unidad

 it('', marbles((m) => { stub(ambulatoryListDataManager, 'combinedMultipleSearchStatuses').returns( m.cold('a', [ { searchStatus: SearchStatus.active, // SearchStatus is an enum type flags: { loaded: true, loading: false }, list: recordList, }, {...}, ]), ); });

Recibo el siguiente tipo de error:

 Type '{ searchStatus: SearchStatus.active; flags: { loaded: true; loading: false; }; list: IRecord[]; }' is not assignable to type '{ searchStatus: SearchStatus; flags: ListFlagsSelection; list: IRecord[]; }[]'. Object literal may only specify known properties, and 'searchStatus' does not exist in type '{ searchStatus: SearchStatus; flags: ListFlagsSelection; list: IRecord[]; }[]' context.d.ts(11, 9): The expected type comes from this index signature

Como puede ver, la misma propiedad searchStatus , que afirma que no existe en el Object literal , está justo ahí en la definición de tipo que se muestra en el mensaje de error. No parece quejarse de las otras propiedades.

Tenga en cuenta que SearchStatus es un tipo de enumeración .

Todo parece estar completamente bien para mí, entonces, ¿por qué recibo este error?

Esta es una escritura inferida, por lo que pensé que tal vez ayudaría a hacer explícito el retorno de la función, pero no ayuda, sigo teniendo el mismo problema.

Para más contexto, si es necesario, aquí está la función, y la función en sí misma se basa. La primera función es la que proporciona los detalles que usa TypeScript para inferir el retorno esperado.

 public combinedSearchStatuses(searchStatus: SearchStatus) { return combineLatest(...).pipe( map(([flags, list]) => ({ searchStatus, flags, list })), ); } public combinedMultipleSearchStatuses(searchStatuses: SearchStatus[]) { return combineLatest(searchStatuses.map( (searchStatus) => this.combinedSearchStatuses(searchStatus)), ).pipe(distinctUntilChanged((a, b) => {...})
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

El error es ligeramente engañoso y difícil de detectar, se queja de que searchStatus no existe en el tipo de matriz , lo cual es cierto.

Esta línea en concreto,

 Type '{ searchStatus: SearchStatus.active; flags: { loaded: true; loading: false; }; list: IRecord[]; }' is not assignable to type '{ searchStatus: SearchStatus; flags: ListFlagsSelection; list: IRecord[]; }[]'.

Aquí hay un patio de juegos de TS para mostrar aún más por qué

Creo que necesita devolver una matriz de observables en lugar de una observable con una matriz de objetos.

Algo como [m.cold('a', { ... }, m.cold('a', {...})]

over 4 years ago · Santiago Trujillo Relatório

0

Después de la respuesta de Antonio sobre la necesidad de devolver una matriz de Observables, me di cuenta de que había pasado por alto un paso en la definición de la canica rxjs. Necesito definir el paso de retorno para a

Así es como debería verse:

 stub(ambulatoryListDataManager, 'combinedMultipleSearchStatuses').returns( m.cold('-a', { a: [ { searchStatus: SearchStatus.active, flags: { loaded: true, loading: false }, list: recordList, }, { searchStatus: SearchStatus.active, flags: { loaded: true, loading: false }, list: recordList, }, ],

Como olvidé definir correctamente el objeto, se quejaba de que no se definía correctamente el retorno.

over 4 years ago · Santiago Trujillo Relatório
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