Как мы можем создать методы расширения для неглобальных интерфейсов в машинописном?

голоса
1

Я в настоящее время обучения машинописи , но я полностью озадачен, как реализовать методы расширения для неглобальных интерфейсов. Рассмотрим следующий пример: скажем , у меня есть 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и если да, то как я могу это сделать?

Задан 07/11/2018 в 19:57
источник пользователем
На других языках...                            


1 ответов

голоса
0

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

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

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

interface CartSpecial extends Cart {
    ...
}
Ответил 07/11/2018 в 20:42
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more