Каким должен быть тип для метода объекта, возвращающего это в Typescript

#typescript

Вопрос:

Скажем, у меня есть объект, подобный приведенному ниже:

 const console = {
  write(text: string) {
    /* logic */
    return this;
  },
  writeLine(text: string) {
    /* logic */
    return this;
  }
};
 

Каким должен быть возвращаемый тип методов write и WriteLine здесь?

Я знаю, что мы можем определить интерфейс и установить его в качестве возвращаемого типа, но есть ли какой-либо другой способ установить тип, который ссылается на объект?

Комментарии:

1. вам не нужно явно объявлять возвращаемый тип. TS способен сделать это вывод. Если вы хотите, вы можете использовать write(text: string): typeof this

2. @captain-yossarian вы правы, но ESLint показывает это как предупреждение. Хотя мы можем отключить это правило, но хотим знать, есть ли какой-либо другой явный способ определения возвращаемого типа в этом сценарии.

Ответ №1:

Вы можете явно определить возвращаемый тип таким образом:

 const _console = {
  write(text: string): typeof this {
    /* logic */
    return this;
  },
  writeLine(text: string): typeof this {
    /* logic */
    return this;
  }
};

 

Игровая площадка

Или вы можете определить свой console как класс и просто использовать this :

 class Console {
  write(text: string): this {
    /* logic */
    return this;
  }
  writeLine(text: string): this {
    /* logic */
    return this;
  }
};

 

Игровая площадка

Я надеюсь, что это сделает ESLint счастливым: D

Комментарии:

1. Я не могу использовать a class в своем коде. Как вы предположили, мы можем использовать typeof оператор типа. Например. typeof console Спасибо.