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);
}