typescript - Hur skiljer sig ?-operatorn från att inkludera undefined i typen?
Vad är skillnaden mellan de här?
type A = {a?: string}
type A = {a: string | undefined}
type A = {a?: string | undefined}
När skulle jag använda den ena framför den andra?
Relaterat: https://github.com/microsoft/TypeScript/issues/13195
Svar #1
Att använda ? innebär att du kan utelämna det värdet, men att använda undefined innebär att du måste ange antingen en sträng eller undefined.
// Note: Tested with Typescript 3.8.3
type A = { a? : string }
type B = { b: string | undefined }
const objectA: A = {} // OK!
const objectB: B = {} // ERROR: property 'b' is missing on type B
I allmänhet tycker jag att använda ? är det du vill de flesta gånger, eftersom du vill att värdet ska vara undefined som standard. Mycket sällan har jag någonsin stött på ett fall där jag vill att användare uttryckligen ska ange undefined som ett värde.
Svar #2
Det finns en liten skillnad mellan att ha ett objekt med en egenskap som uttryckligen är inställd på undefined, och ett objekt där den egenskapen inte finns alls.
type A = {a: string | undefined} // No "?", so this enforces that key "a" must be present!
let varA: A = { a: undefined } // OK
let varB: A = {} // Not OK, because key "a" is not present
