Qual é o ponto de interrogação em um nome de parâmetro do Typecript


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

Para id?que serve ??

Respostas:


207

6
Eu vi o símbolo $ no final dos nomes das variáveis. O que isso significa?
Sunil Garg

12
Não está relacionado ao TypeScript. Eu já vi essa sintaxe em projetos de RxJs. No documento: é uma "convenção RxJS comum para identificar variáveis ​​que fazem referência a um fluxo". github.com/redux-observable/redux-observable/blob/master/docs/…
Fidan Hakaj

3
O @SunilGarg $ postfix geralmente é uma convenção de nomenclatura para significar que a variável é observável.
Java-addict301

30

Isso é para tornar a variável do tipo opcional. Caso contrário, as variáveis ​​declaradas mostram " indefinido " se essa variável não for usada.

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

1
Não concordo que indique um tipo "anulável". Indica opcional, não anulável. Ainda é válido, por exemplo, que titleno exemplo acima tenha um valor igual a, nullmas seria inválido para uma classe que afirma implementar ISearchResulta falta de uma entityNamepropriedade em tempo de compilação.
Josh Gallagher

8
Eu acho que o nome correto é "parâmetro opcional". Tipo anulável seria string?. Para ter um anulável opcional, você faria name?: string?.
user276648

@DvG Você gostaria de melhorar sua resposta considerando os comentários de Josh Gallagher e user276648?
user1460043

@ user1460043 .. Atualizei minha resposta. Obrigado por me avisar.
DvG 14/09/18

Presumo que o fraseado "tipo opcional" se origine de linguagens como c ++, scala ou python. Onde você tem um tipo opcional <T> genérico. Na verdade, faria mais sentido colocar a ?especificação de tipo após em vez de após o nome da variável. Se você não passar nada para lookupId, ele não terá tipo string.
Marti Nito

13

parameter?: type é uma abreviação de parameter: type | undefined


2
Não exatamente. Ponto de interrogação significa "opcional". Portanto, é uma abreviação de "parameter: type | undefined = undefined" ..
mcoolive
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.