Do czego służy znak zapytania w nazwie parametru 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;
  }
}

Do id?czego służy ??

Odpowiedzi:


207

6
Widziałem symbol $ na końcu nazw zmiennych. Co to znaczy?
Sunil Garg

12
Nie jest powiązany z TypeScript. Widziałem taką składnię w projektach RxJs. Z dokumentu: jest to „powszechna konwencja RxJS do identyfikowania zmiennych, które odwołują się do strumienia”. github.com/redux-observable/redux-observable/blob/master/docs/…
Fidan Hakaj

3
@SunilGarg $ postfix jest zwykle konwencją nazewnictwa, która oznacza, że ​​zmienna jest obserwowalna.
java-addict301

30

Ma to na celu nadanie zmiennej typu opcjonalnego. W przeciwnym razie zmienne zadeklarowane pokazują „ niezdefiniowane ”, jeśli ta zmienna nie jest używana.

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

1
Nie zgadzam się, że oznacza to typ „dopuszczający wartość zerową”. Wskazuje opcjonalne, nie dopuszcza wartości null. Na przykład nadal jest ważna, ponieważ titlew powyższym przykładzie miałaby wartość, nullale byłaby niepoprawna w przypadku klasy, która twierdzi, że implementuje, w ISearchResultktórej brakuje entityNamewłaściwości w czasie kompilacji.
Josh Gallagher

8
Myślę, że poprawna nazwa to „parametr opcjonalny”. Typ dopuszczalny byłby string?. Aby mieć opcjonalną wartość null, zrobiłbyś name?: string?.
user276648

@DvG Czy zechciałbyś poprawić swoją odpowiedź, biorąc pod uwagę komentarze Josha Gallaghera i user276648?
user1460043

@ user1460043 .. Zaktualizowałem moją odpowiedź. Dzięki za powiadomienie mnie
DvG,

Zakładam, że wyrażenie „typ opcjonalny” pochodzi z języków takich jak c ++, scala lub python. Gdzie masz ogólny typ Optional <T>. W rzeczywistości bardziej sensowne byłoby umieszczenie ?po specyfikacji typu zamiast po nazwie zmiennej. Jeśli nic nie przekażesz lookupId, to nie będzie miał typu string.
Marti Nito

13

parameter?: type jest skrótem dla parameter: type | undefined


2
Nie dokładnie. Znak zapytania oznacza „opcjonalny”. Jest to więc skrót dla „parameter: type | undefined = undefined” ..
mcoolive
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.