Как мы можем создать методы расширения для неглобальных интерфейсов в TypeScript? - PullRequest
0 голосов
/ 07 ноября 2018

В настоящее время я изучаю TypeScript, но я полностью озадачен тем, как реализовать методы расширения для неглобальных интерфейсов. Рассмотрим следующий пример: скажем, у меня есть interface, определяющий Cart примерно так:

interface Cart {
    id(): string,
    name(): string,
    quantity(): number

    /* Other methods */
}

Затем я хотел бы добавить метод расширения, подобный следующему:

Cart.prototype.isValid = function() {
    return this.quantity() > 0;
}

Это, очевидно, не работает, поскольку Cart не является типом, но я запутался, потому что Promise также определен как interface, но я могу успешно добавить методы расширения к нему. Например:

declare global {
    interface Promise<T> {
        hello(): string
    }
}

Promise.prototype.hello = function() {
    return "Hello!";
}

export {};

Можно ли расширить неглобальные интерфейсы, такие как Cart, и если да, то как мне это сделать?

1 Ответ

0 голосов
/ 07 ноября 2018

В вашем случае, Корзина - это просто тип. Там нет объекта, вы не можете расширить прототип типа / интерфейса ref. Нет прототипа для расширения, вы можете сделать это с помощью какого-либо объекта, который реализует Cart.

В случае Promise это API-интерфейс браузера, если вы получили консоль в браузере и набрали Promise, вы увидите, что у вас там есть объект. Когда вы расширяете прототип обещания, как в приведенном вами примере, вы расширяете не интерфейс, а предоставленный объект.

Одним из возможных решений, если вы хотите сделать это, является составление интерфейса, например:

interface CartSpecial extends Cart {
    ...
}
...