interface Counter {
(start: number): string;
interval: number;
reset(): void;
}
function getCounter(): Counter {
let counter = <Counter>function(start: number) {
return start.toString();
};
counter.interval = 123;
counter.reset = function() {
this.interval = 0;
};
return counter;
}
let c = getCounter();
c(10);
c.reset();
c.interval = 5.0;
Я хочу знать:
(start: number): string;
анонимная функция здесь?
значение <Counter>
в
let counter = <Counter>function(start: number) {
return start.toString();
};
Я не понимаю, что такое c
в let c = getCounter()
;
Это не объект, не класс, и его тип — Counter
, что означает interface
(но почему он назначен функции?) Так c
является экземпляром Counter? А интерфейс равен функции?
1-й ответ: это подпись вызова (что-то вроде конструктора), и это означает, что этот интерфейс является функцией, и когда вы его реализуете, у него должна быть функция, которая получает число и возвращает строку, и когда вы хотите создать экземпляр своей реализации, вы должны назови это.
2-й ответ: эта функция определяет конструктор интерфейса и возвращает экземпляр реализации вашего интерфейса.
3-й ответ: связанный со вторым ответом, созданный экземпляр должен быть помещен в переменную.
надеюсь понятно объяснил
См. typescriptlang.org/docs/handbook/interfaces.html;
(start: number): string
означает, что интерфейс описывает тип функции.c
— это функция во время выполнения; интерфейсы существуют только до компиляции.