À quoi sert le point d'interrogation dans un nom de paramètre 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;
  }
}

Dans id?quel est le ?pour?

Réponses:


207

6
J'ai vu le symbole $ à la fin des noms de variables. Qu'est-ce que ça veut dire?
— Sunil Garg

12
Il n'est pas lié à TypeScript. J'ai vu une telle syntaxe dans les projets RxJs. D'après la doc: c'est une "convention RxJS commune pour identifier les variables qui référencent un flux." github.com/redux-observable/redux-observable/blob/master/docs/…
— Fidan Hakaj

3
@SunilGarg $ postfix est généralement une convention de dénomination pour signifier que la variable est une observable.
— java-addict301

30

Il s'agit de rendre la variable de type facultatif. Sinon, les variables déclarées affichent " indéfini " si cette variable n'est pas utilisée.

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

1
Je ne suis pas d'accord qu'il indique un type "nullable". Il indique facultatif, non nullable. Il est toujours valide, par exemple, pour titledans l'exemple ci-dessus avoir une valeur de, nullmais il ne serait pas valide pour une classe qui prétend implémenter ISearchResultune entityNamepropriété manquante au moment de la compilation.
— Josh Gallagher

8
Je pense que le nom correct est "paramètre facultatif". Le type Nullable serait string?. Pour avoir un nullable facultatif, vous le feriez name?: string?.
— user276648

@DvG Pourriez-vous améliorer votre réponse compte tenu des commentaires de Josh Gallagher et de l'utilisateur 276648?
— user1460043

@ user1460043 .. J'ai mis à jour ma réponse. Merci de m'avoir notifié
— DvG

Je suppose que le phrasé "type facultatif" provient de langages comme c ++, scala ou python. Où vous avez un type <T> facultatif générique. En fait, il serait plus judicieux de placer ?après la spécification de type plutôt qu'après le nom de la variable. Si vous ne transmettez rien à lookupId, il n'aura pas de type string.
— Marti Nito

13

parameter?: type est un raccourci pour parameter: type | undefined


2
Pas exactement. Le point d'interrogation signifie «facultatif». C'est donc un raccourci pour "paramètre: type | undefined = undefined" ..
— mcoolive
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.