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

166
Views
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 answers
Answer question

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 Report

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 Report
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!