Что означает этот стиль письма?

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;

Я хочу знать:

  1. (start: number): string; анонимная функция здесь?

  2. значение <Counter> в

    let counter = <Counter>function(start: number) {
      return start.toString();
    };
    
  3. Я не понимаю, что такое c в let c = getCounter();

    Это не объект, не класс, и его тип — Counter, что означает interface (но почему он назначен функции?) Так c является экземпляром Counter? А интерфейс равен функции?

См. typescriptlang.org/docs/handbook/interfaces.html; (start: number): string означает, что интерфейс описывает тип функции. c — это функция во время выполнения; интерфейсы существуют только до компиляции.

jonrsharpe 28.05.2019 09:29
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
1
1
21
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

1-й ответ: это подпись вызова (что-то вроде конструктора), и это означает, что этот интерфейс является функцией, и когда вы его реализуете, у него должна быть функция, которая получает число и возвращает строку, и когда вы хотите создать экземпляр своей реализации, вы должны назови это.

2-й ответ: эта функция определяет конструктор интерфейса и возвращает экземпляр реализации вашего интерфейса.

3-й ответ: связанный со вторым ответом, созданный экземпляр должен быть помещен в переменную.

надеюсь понятно объяснил

Другие вопросы по теме