Для чого використовується знак питання в назві параметра 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;
  }
}

У id?чому ?для чого?

Відповіді:


207

Він повинен позначати параметр як необов'язковий .


6
Я бачив $ символ у кінці імен змінних. Що це означає?
— Sunil Garg

12
Це не пов’язано з TypeScript. Я бачив такий синтаксис у проектах RxJs. Від doc: це "загальна умова RxJS для ідентифікації змінних, що посилаються на потік". github.com/redux-observable/redux-observable/blob/master/docs/…
— Fidan Hakaj

3
@SunilGarg $ postfix - звичайно умова іменування, яке означає, що змінна є спостережуваною.
— java-addict301

30

Це робиться для змінної необов’язкового типу. В іншому випадку оголошені змінні показують " невизначеними ", якщо ця змінна не використовується.

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

1
Я не згоден, що він вказує на "нульовий" тип. Він позначає необов’язковий, а не нульовий. Наприклад, воно все ще діє, наприклад, titleу наведеному вище прикладі має значення, nullале було б недійсним для класу, який стверджує, що впроваджує ISearchResultвідсутність entityNameвластивості під час компіляції.
— Джош Галлахер

8
Я думаю, що правильна назва - "необов'язковий параметр". Незмінний тип був би string?. Щоб мати необов'язковий нуль, ви зробите це name?: string?.
— користувач276648

@DvG Ви б заперечили покращити свою відповідь, враховуючи коментарі Джоша Галлахера та користувача276648?
— користувач1460043

@ user1460043 .. Я оновив свою відповідь. Дякуємо, що повідомили мене
— DvG

Я припускаю, що словосполучення "необов'язковий тип" походить з таких мов, як c ++, scala або python. Там, де у вас є загальний необов’язковий тип <T>. Насправді було б більше сенсу ставити ?після специфікації типу замість імені змінної. Якщо ви нічого не передаєте lookupId, він не матиме тип string.
— Marti

13

parameter?: type - це стенограма для parameter: type | undefined


2
Не зовсім. Знак питання означає "необов'язково". Так це скорочення для "параметра: type | type | undefined = undefined" ..
— mcoolive
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.