A cosa serve il punto interrogativo nel nome di un parametro Typescript


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?che cosa serve ??

Risposte:


207

6
Ho visto $ simbolo alla fine dei nomi delle variabili. Cosa significa?
Sunil Garg,

12
Non è correlato a TypeScript. Ho visto questa sintassi nei progetti di RxJs. Dal documento: è una "convenzione RxJS comune per identificare le variabili che fanno riferimento a un flusso". github.com/redux-observable/redux-observable/blob/master/docs/…
Fidan Hakaj

3
@SunilGarg $ postfix è in genere una convenzione di denominazione per indicare che la variabile è osservabile.
java-addict301,

30

Questo per rendere la variabile di tipo Opzionale. Altrimenti le variabili dichiarate mostrano " non definito " se questa variabile non viene utilizzata.

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

1
Non sono d'accordo sul fatto che indichi un tipo "nullable". Indica facoltativo, non nullable. È ancora valido, ad esempio, perché titlenell'esempio sopra riportato abbia un valore di nullma non sarebbe valido per una classe che afferma di implementare ISearchResultmancando una entityNameproprietà al momento della compilazione.
Josh Gallagher,

8
Penso che il nome corretto sia "parametro opzionale". Il tipo nullable sarebbe string?. Per avere un nullable opzionale, lo faresti name?: string?.
user276648,

@DvG Ti andrebbe di migliorare la tua risposta considerando i commenti di Josh Gallagher e dell'utente276648?
user1460043,

@ user1460043 .. Ho aggiornato la mia risposta. Grazie per avermi avvisato
DvG

Suppongo che la frase "tipo opzionale" provenga da lingue come c ++, scala o python. Dove si dispone di un tipo <T> facoltativo. In realtà, sarebbe più logico inserire la ?specifica del tipo after anziché dopo il nome della variabile. Se non passi nulla a lookupId, allora non avrà tipo string.
Marti Nito,

13

parameter?: type è una scorciatoia per parameter: type | undefined


2
Non esattamente. Il punto interrogativo significa "facoltativo". Quindi è una scorciatoia per "parametro: tipo | undefined = undefined" ..
mcoolive
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.