Создание API с помощью методов вложенных классов (Typescript) - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь создать класс машинописного текста, который обертывает API REST, и я хотел бы организовать различные методы в подобъекты для лучшей выразительности кода.Любой способ сделать это и по-прежнему поддерживать доступ к экземпляру класса через 'this' из методов?

Например, рассмотрим следующий класс:

class ApiService {
  constructor() {....}

  getMedia() {}

  uploadMedia() {}

  sendMassage() {}

  recieveMessage() {}

}

Я хотел бы организоватьвышеупомянутые методы, чтобы я мог вызывать их так:

const service = new ApiService();
//to call getMedia()
service.media.get();
//to call sendMessage()
service.messages.send();
// and so on

1 Ответ

0 голосов
/ 01 июня 2019

Я думаю, чтобы достичь того, о чем вы просите, в точности так, как указано, вы должны использовать функции стрелок , чтобы объекты apiService.media и apiService.message не имели собственного контекста this для мешать. Например:

class ApiService {

    constructor(public name: string) { }

    private getMedia() { 
        console.log(this.name+" getMedia");
    }

    private uploadMedia() { 
        console.log(this.name+" uploadMedia");
    }

    private sendMassage() { 
        console.log(this.name+" sendMessage");
    }

    private recieveMessage() { 
        console.log(this.name+" receiveMessage");
    }

    // instance methods
    public media = {
        get: () => this.getMedia(),
        upload: () => this.uploadMedia()
    }

    // instance methods
    public message = {
        send: () => this.sendMassage(),
        receive: () => this.recieveMessage()
    }

}

Обратите внимание, что это означает, что каждый экземпляр ApiService будет иметь свою собственную копию свойств-значений message.send и т. Д. Они не будут располагаться в ApiService.prototype как обычные методы. Это не должно иметь большого значения, если вы не породили много экземпляров ApiService.

Давайте убедимся, что он работает и правильно привязан:

const api1 = new ApiService("One");
const api2 = new ApiService("Two");

api1.message.receive(); // One recieveMessage
api2.message.receive(); // Two receiveMessage

api1.media.get(); // One getMedia
api2.media.get(); // Two getMedia

Хорошо выглядит. Надеюсь, это поможет; удачи!

Ссылка на код

...