Wofür steht das Fragezeichen in einem Typescript-Parameternamen?


179
export class Thread {
  id: string;
  lastMessage: Message;
  name: string;
  avatarSrc: string;

  constructor(id?: string,
              name?: string,
              avatarSrc?: string) {
    this.id = id || uuid();
    this.name = name;
    this.avatarSrc = avatarSrc;
  }
}

In id?was ist das ?für?

Antworten:


206

6
Ich habe das $ -Symbol am Ende von Variablennamen gesehen. Was bedeutet das?
Sunil Garg

12
Es ist nicht mit TypeScript verwandt. Ich habe eine solche Syntax in RxJs Projekten gesehen. Aus dem Dokument: Es handelt sich um eine "allgemeine RxJS-Konvention zum Identifizieren von Variablen, die auf einen Stream verweisen". github.com/redux-observable/redux-observable/blob/master/docs/…
Fidan Hakaj

3
@SunilGarg $ postfix ist normalerweise eine Namenskonvention, um zu bedeuten, dass die Variable beobachtbar ist.
Java-Addict301

30

Dies dient dazu, die Variable vom optionalen Typ zu machen . Andernfalls zeigt deklarierte Variablen " undefiniert " an, wenn diese Variable nicht verwendet wird.

export interface ISearchResult {  
  title: string;  
  listTitle:string;
  entityName?: string,
  lookupName?:string,
  lookupId?:string  
}

1
Ich bin nicht damit einverstanden, dass es sich um einen "nullbaren" Typ handelt. Es zeigt optional an, nicht nullbar. Es ist beispielsweise weiterhin gültig, dass titleim obigen Beispiel der Wert " nullaber" ungültig ist, aber es wäre ungültig, wenn eine Klasse, deren Implementierung behauptet, beim Kompilieren ISearchResulteine entityNameEigenschaft fehlt .
Josh Gallagher

8
Ich denke, der richtige Name ist "optionaler Parameter". Nullable Typ wäre string?. Um eine optionale Nullable zu haben, würden Sie tun name?: string?.
user276648

@DvG Würde es Ihnen etwas ausmachen, Ihre Antwort unter Berücksichtigung der Kommentare von Josh Gallagher und user276648 zu verbessern?
user1460043

@ user1460043 .. Ich habe meine Antwort aktualisiert. Vielen Dank für die Benachrichtigung
DvG

Ich gehe davon aus, dass die Formulierung "optionaler Typ" aus Sprachen wie c ++, scala oder python stammt. Wo Sie einen generischen optionalen <T> -Typ haben. Eigentlich wäre es sinnvoller, das ?nach der Typspezifikation anstatt nach dem Variablennamen zu setzen. Wenn Sie nichts weitergeben lookupId, hat es keinen Typ string.
Marti Nito

14

parameter?: type ist eine Abkürzung für parameter: type | undefined


2
Nicht genau. Fragezeichen bedeutet "optional". Es ist also eine Abkürzung für "parameter: type | undefined = undefined".
mcoolive
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.