275 votes

À quoi sert le point d'interrogation dans le nom d'un paramètre Typescript ?

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

Sur id? quel est le ? pour ?

297voto

Fidan Hakaj Points 2755

9 votes

J'ai vu le symbole $ à la fin des noms de variables. Qu'est-ce que cela signifie ?

20 votes

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

7 votes

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

44voto

DvG Points 204

Ceci afin de rendre le 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  
}

2 votes

Je ne suis pas d'accord avec le fait qu'il indique un type "nullable". Il indique qu'il est facultatif, pas qu'il est annulable. Il est toujours valable, par exemple, pour title dans l'exemple ci-dessus pour avoir une valeur de null mais il serait invalide pour une classe qui prétend implémenter ISearchResult de manquer un entityName au moment de la compilation.

17 votes

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

0 votes

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

36voto

Masih Jahangiri Points 161

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

31 votes

Pas exactement. Le point d'interrogation signifie "facultatif". C'est donc un raccourci pour "paramètre : type | indéfini = indéfini"

3 votes

En fait, il ne s'agit pas d'un défaut undefined mais plutôt à la non-existence. La réponse de Masih est correcte : parameter?: type est un raccourci pour parameter: type | undefined Notez à quel point = undefined se comporte en cet exemple .

7 votes

@lodewykk Ce n'est pas exactement un raccourci, non plus. param?: type déclare le paramètre comme facultatif, param: type | undefined ne le fait pas. Exemple : const foo: { a?: string } = {} fonctionne mais const foo: { a: string | undefined } = {} échoue. Pendant ce temps, dans les déclarations de fonctions, @mcoolive a raison et arg?: type est équivalent à arg: type | undefined = undefined , comparer stackoverflow.com/questions/37632760/

8voto

Le site ? dans les paramètres est de dénoter une paramètre facultatif . Le compilateur Typescript n'exige pas que ce paramètre soit rempli. Voir l'exemple de code ci-dessous pour plus de détails :

// baz: number | undefined means: the second argument baz can be a number or undefined

// = undefined, is default parameter syntax, 
// if the parameter is not filled in it will default to undefined

// Although default JS behaviour is to set every non filled in argument to undefined 
// we need this default argument so that the typescript compiler
// doesn't require the second argument to be filled in
function fn1 (bar: string, baz: number | undefined = undefined) {
    // do stuff
}

// All the above code can be simplified using the ? operator after the parameter
// In other words fn1 and fn2 are equivalent in behaviour
function fn2 (bar: string, baz?: number) {
    // do stuff
}

fn2('foo', 3); // works
fn2('foo'); // works

fn2();
// Compile time error: Expected 1-2 arguments, but got 0
// An argument for 'bar' was not provided.

fn1('foo', 3); // works
fn1('foo'); // works

fn1();
// Compile time error: Expected 1-2 arguments, but got 0
// An argument for 'bar' was not provided.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X