typescript - Objektet är eventuellt odefinierat


Jag har följande typ:

type Person = {
  name: string 
  age: number
  value?: number
}

Jag har också en exempelarray med objekt:

const arr = [
  {
    name: 'A',
    age: 1
  },
  {
    name: 'B',
    age: 2
  }
]

Nu skulle jag vilja lägga till en egenskap value till varje objekt i arrayen

 const newArr = arr.map(item => {
    return {
      ...item,
      value: fun(item)
    }
  })

Och här är en funktion som lägger till värde

const add = (item: Person): number => {
  return item.value + 1
}

Nu har vi ett TypeScript-problem:

Object is possibly 'undefined'.ts(2532)

Jag är ganska säker på att jag inte kan göra något sådant eftersom jag behöver returnera ett nummer?

const add = (item: Person): number => {
  return item.value && item.value + 1
}

Hur ska jag hantera detta?

Svar #1

Eftersom din värdeegenskap är number | undefined klagar TS på det.

Svar #2

Eftersom du definierade value som valfritt, kan inte din add-funktion vara säker på att det finns. Därför är dess beteende inte väl definierat. Vad bör den returnera om ett item skickas som inte har någon value-attribut?

Du kan antingen göra value till ett obligatoriskt attribut/skapa ett nytt gränssnitt:

interface ValuedPerson extends Person {
    value: number;
}

const add = (item: ValuedPerson): number => {
    return item.value + 1
}

eller lägg till ett standardvärde, som detta svar föreslår.

Efter OP:s kommentar: Du kan tala om för TypeScript att det faktiskt finns genom att lägga till ett utropstecken:

const add = (item: Person): number => {
    return item!.value + 1
}