Модуль выявления — у цели которого отсутствует сигнатура конструкции?

#typescript

#typescript

Вопрос:

Почему этот код в typescript 3.9.2 выдает мне эту ошибку:

выражение ‘new’, у цели которого отсутствует сигнатура конструкции, неявно имеет тип ‘any’.

Код является:

 const Module = function(){

  function sayHello(){
    console.log('Hello');
  }

  return {
    sayHello: sayHello
  }
};

let module: any = new Module();
  

Ответ №1:

Я бы настоятельно рекомендовал вам использовать классы ES6. но в случае, если вы хотите продолжать использовать функции, то приведенное ниже решение будет работать для вас:

  interface Module {
  sayHello: () => void;
}

const Module = function(){

  function sayHello(){
    console.log('Hello');
  }

  return {
    sayHello: sayHello
  }
} as any as { new (): Module; };
  
let module = new Module();
  

Если вы хотите использовать классы, вы можете просто написать:

 class Module {

  sayHello() {
    return console.log('Hello');
  }

};

let module = new Module();

module.sayHello();
  

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

Ответ №2:

new предназначен для создания экземпляров классов. Но шаблон раскрывающего модуля — это просто функция, которая возвращает объект.

Вы хотите создать свой модуль, вызвав его как любую обычную функцию, а не как конструктор класса.

 let module = Module();
module.sayHello() // logs 'Hello'
  

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