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? что за ? для?


Ответов: 4

Ответы (4)

Пометить параметр как необязательный.

? в параметрах означает необязательный параметр. Компилятор Typescript не требует заполнения этого параметра. Подробнее см. В примере кода ниже:

// 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

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

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

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

Это делается для того, чтобы переменная имела необязательный тип. В противном случае объявленные переменные показывают «undefined», если эта переменная не используется.

export interface ISearchResult {  
  title: string;  
  entityName?: string,

параметр ?: тип - это сокращение от параметр: тип | не определено

Так в чем разница? Знак вопроса означает «необязательный».
Точнее параметр ?: тип равен параметр: тип | undefined = undefined

2022 WebDevInsider