#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'