firebase - typescript gränssnitt variabel nullkontroll och sätt standardvärde
Hur kontrollerar man null på en gränssnittsvariabel och hur sätter man standardvärde i TypeScript?
const userModel = snap.data() as UserModel //firestore
export interface UserModel {
docId: string,
accountId: number // if null then I want to set 0
}
Ibland har användare inte kontots ID. Så hur kontrollerar jag det?
if (userModel.userPushToken !== undefined) - För närvarande kontrollerar jag på detta sätt
Svar #1
Initialiserare i gränssnitt
I Typescript är ett interface bara en beskrivning av hur ett objekt ska se ut och kan inte innehålla några funktioner. På grund av detta behöver du inte konstruera ett interface som du skulle behöva göra med en klass. Och på grund av detta kan du inte göra någon initialisering i interfacet.
Om du kompilerar ett Typescript-interface till javascript, tar Typescript-kompilatorn helt enkelt bort det, eftersom det inte har någon funktionalitet förutom att göra saker mer läsbara och tillhandahålla typkontroll.
Om du vill initialisera en variabel skulle jag rekommendera att du ändrar interfacet till en klass:
export class MyUserModel implements UserModel{
public docId: string;
public accountId: number
constructor(usrmodel:UserModel){
this.docId = usrmodel.docId || ""; // Initialize with "" if docId is null or undefined
this.accountId = usrmodel.accountId || 0; // Initialize with 0 if accountid is null or undefined
}
}
eller skriv en "kopieringskonstruktor" för gränssnittet:
function InitUserModel(usrModel:UserModel):UserModel{
usrModel.accountId = usrModel.accountId || 0;
return usrModel;
}
Kontrollera om null eller undefined
Det finns många bra inlägg för detta. Till exempel, finns det ett sätt att kontrollera både `null` och `undefined`?
Svar #2
Typescript är bara typ.
Så, du kan inte ställa in standardvärde.
Men, du kan ställa in standardtyp.
export interface UserModel<T> {
docId: string,
accountId: T extends number ? number : 0 // if null then I want to set 0
}
const snap: any = {}
const userModel = snap.data() as UserModel<void> //firestore
userModel.accountId = 0 // if assign not 0, error occured.
Du kan sätta standardvärde i funktionen.
Men, det är JavaScript, inte TypeScript.
type Params = {
a: number,
b: string
}
const foo = ({ a=1, b='something'}: Params ) => {
console.log(params);
}
