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

299
Views
Escritura mecanografiada "Objeto literal solo puede especificar propiedades conocidas" no efectos en la función de retorno de Promesa

Typescript comprobará las propiedades desconocidas:

(a continuación tendrá un error: "'c' does not exist in type..." )

 interface IReturnVal { a: boolean; b: boolean; } function oh(): IReturnVal { return { a: true, b: false, c: 1, // Type '{ a: true; b: false; c: number; }' is not assignable to type 'IReturnVal'. Object literal may only specify known properties, and 'c' does not exist in type 'IReturnVal'.ts(2322) }; } oh();

Sin embargo, si las funciones devuelven Promise , Typescript solo verificará las propiedades faltantes

(a continuación tendrá un error: "Property 'a' is missing in type..." )

 interface IReturnVal { a: boolean; b: boolean; } function ok(): Promise<IReturnVal> { // Property 'a' is missing in type .... return Promise.resolve({ b: false, }); } ok();

Pero no verificar propiedades desconocidas .

(a continuación no tendrá ningún error o advertencia)

esperar: tiene el error "Object literal may only specify known properties..."

 interface IReturnVal { a: boolean; b: boolean; } function ok(): Promise<IReturnVal> { return Promise.resolve({ a: true, b: false, c: 1, // will not cause any error or warning }); } ok();

¿Es este el comportamiento esperado o me falta algo en la configuración de Typescript?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

La razón por la que no genera un error en su ejemplo es que su código no devuelve inmediatamente un objeto literal, sino que devuelve el resultado de llamar a una función. Las comprobaciones de propiedad en exceso solo se aplican a los objetos literales. Dado que la función ( Promise.resolve ) está devolviendo Promise<{a: boolean, b: boolean, c: number}> y eso es compatible con la asignación con el tipo de retorno Promise<{a: boolean, b: boolean}> de ok , TypeScript no se queja.

Puede hacer que TypeScript verifique el objeto literal que está pasando a Promise.resolve proporcionando un argumento de tipo a Promise.resolve :

 interface IReturnVal { a: boolean; b: boolean; } function ok(): Promise<IReturnVal> { return Promise.resolve<IReturnVal>({ // ^^^^^^^^^^^^ a: true, b: false, c: 1, // <== error here as desired }); } ok();

Enlace del patio de recreo

Alternativamente, puede hacer que ok sea una función async :

 interface IReturnVal { a: boolean; b: boolean; } async function ok(): Promise<IReturnVal> { // ^^^^^ return { a: true, b: false, c: 1, // <== error here as desired }; } ok();

Enlace del patio de recreo

Para evitar dudas: las funciones async siempre devuelven promesas. Si devuelve una no promesa, se envuelve en una promesa como si pasara a través Promise.resolve .

about 4 years ago · Juan Pablo Isaza 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!