const x = [{a: 1, b: 2}].map((d: any) => ({...d, c: 'something new'})) ¿Cómo puedo hacer que x tenga c property en la matriz del objeto anterior?
Lo intenté
const x = ([{a: 1, b: 2}] as any).map((d: <{c: string}>) => ({...d, c: 'something new'})) pero no parece que sea la sintaxis correcta.
No necesita el <> al especificar un tipo en línea
const x = ([{a: 1, b: 2}] as any).map((d: {c: string}) => ({...d, c: 'something new'}))Podrías escribir el resultado así
const x: Array<{a:number; b: number; c:string;}> = [{a: 1, b: 2}].map((d) => ({...d, c: 'something new'}))O simplemente deje que TypeScript lo resuelva (preferido como se menciona en @AluanHaddad)
const x = [{a: 1, b: 2}].map((d) => ({...d, c: 'something new'}));A veces, ayuda nombrar y anotar los tipos que desea averiguar qué se necesita.
interface AB { a: number b: number } interface ABC extends AB { c: string } const x: ABC[] // annotate what's expected = [{a: 1, b: 2}] // input .map( ab => // inferred type ({...ab, c: 'something new'}) // result is shape of ABC (per element) ) // Once more, allowing type inference to do the work // just to show we can be succinct when we want to be const y = [{ a: 1, b: 2 }].map(ab => ({...ab, c: 'something'})) // ^ NB: y is not typed as ABC[], but has the right shape Personalmente, a menudo me gusta especificar el tipo en la variable receptora ( const x: ABC[] ... ) porque esto asegura que el resultado tenga la forma que esperamos (y si nos desplazamos más tarde, mostrará ese tipo, no algo que pasa a ser la forma correcta que puede ser difícil de asimilar).