¿Para qué sirve el signo de interrogación en un nombre de parámetro mecanografiado

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

id?¿ Para qué sirve ??

Whisher
fuente

Respuestas:

207

Es para marcar el parámetro como opcional .

Fidan Hakaj
fuente
66
He visto el símbolo $ al final de los nombres de las variables. Qué significa eso?
Sunil Garg
12
No está relacionado con TypeScript. He visto tal sintaxis en proyectos de RxJs. Desde el documento: es una "convención común de RxJS para identificar variables que hacen referencia a una secuencia". github.com/redux-observable/redux-observable/blob/master/docs/…
Fidan Hakaj
3
@SunilGarg $ postfix suele ser una convención de nomenclatura que significa que la variable es observable.
java-addict301
30

Esto es para hacer la variable de tipo Opcional. De lo contrario, las variables declaradas muestran " indefinido " si esta variable no se utiliza.

export interface ISearchResult {  
  title: string;  
  listTitle:string;
  entityName?: string,
  lookupName?:string,
  lookupId?:string  
}
DvG
fuente
1
No estoy de acuerdo con que indique un tipo "anulable". Indica opcional, no anulable. Todavía es válido, por ejemplo, titleen el ejemplo anterior tener un valor de nullpero sería inválido para una clase que dice implementar ISearchResultque falta una entityNamepropiedad en tiempo de compilación.
Josh Gallagher
8
Creo que el nombre correcto es "parámetro opcional". El tipo anulable sería string?. Para tener un anulable opcional, lo haría name?: string?.
user276648
@DvG ¿Le importaría mejorar su respuesta teniendo en cuenta los comentarios de Josh Gallagher y user276648?
user1460043
@ user1460043 .. He actualizado mi respuesta. Gracias por notificarme
DvG
Supongo que la fraseología "tipo opcional" se origina en lenguajes como c ++, scala o python. Donde tiene un tipo genérico Opcional <T>. En realidad, tendría más sentido poner ?después de la especificación de tipo en lugar de después del nombre de la variable. Si no le pasa nada lookupId, entonces no tendrá tipo string.
Marti Nito
13

parameter?: type es una abreviatura de parameter: type | undefined

Masih Jahangiri
fuente
2
No exactamente. El signo de interrogación significa "opcional". Así que es una abreviatura de "parámetro: tipo | undefined = undefined" ..
mcoolive