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
}
