angular - Typescript 如何从嵌套对象 Getter 返回类函数引用

标签 angular typescript getter es6-class

我正在编写一个服务类,其中包含实用程序函数的集合。这些函数不是将所有函数公开为公共(public)函数,而是串联成一系列公共(public)对象,旨在提供访问它们的逻辑流。这是一个例子:

class MyUtilService {
    public exposedObject = {
        get prop1() {
            return this.utilFunction1;
        },
        get prop2() {
            return this.utilFunction2;
        }
    };

    private utilFunction1() {//...}
    private utilFunction2() {//...}
}

问题在于,getter 中的 this 对象引用的是 exposedObject 而不是类(正如预期的那样)。目标是在应用程序的其他位置访问这些函数,如下所示:

myUtilService.exposedObject.prop1() // Want this to execute utilFunction1

这里的另一个愿望是在使用时维护来自 utilFunction1 的输入信息。我之前曾使用 .bind(this) 而不是 getter,但这会阻止传递任何类型信息。 Object.defineProperty 也会发生同样的情况。关于如何让它发挥作用有什么想法吗?

注释:使用 TS 2.5.x 和 Angular 5.x

编辑: 我添加了一些额外的信息,因为问题的核心在我最初的帖子中并不清楚。当一个私有(private)函数使用服务内的另一个函数时,就会出现主要问题。考虑这段代码:

class MyUtilClass {
    public exposedObject = {
        prop1: this.utilFunction1
    };

    private utilFunction1() {
        this.utilFunction2();
    }
    private utilFunction2() {//...}
}

// Want this to execute utilFunction1 which executes utilFunction2
someService.exposedObject.prop1()

utilFunction2 在 utilFunction1 内部使用,但当调用 myUtilClass.exposedObject.prop1() 时,this.utilFunction2 未定义,因为this 上下文来自调用者(同样,正如预期的那样)。这可以通过 prop1: this.utilFunction1.bind(this) 来克服,但随后您会丢失该函数的键入信息。这是一个难题。这就是为什么我采用嵌套 getter 的方式,但这在 this 上下文中存在其自身的问题。

最佳答案

考虑到您想要实现的目标,这应该对您有用。

class MyUtilService {
    public exposedObject = {
        prop1:this.prop1,
        prop2:this.prop2
    }
    private get prop1(){
        return this.utilFunction1();
    }
    private get prop2() {
        return this.utilFunction2();
    }

    private utilFunction1() {}
    private utilFunction2() {}
}

let utilityservice = new MyUtilService();
utilityservice.exposedObject.prop2;

关于angular - Typescript 如何从嵌套对象 Getter 返回类函数引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322431/

相关文章:

javascript - jspdf.addHTML 抛出错误

angular - 以 Angular 5 显示/隐藏链接的最佳方式

angular - 在 Angular 2 中更改 url 而不重定向

typescript - 在 TypeScript 中,使第二个参数自动完成取决于第一个参数中的字符串

没有括号的 Javascript 向后感知链接,例如期望(x).not.toBe()

javascript - Angular 2 将表单发布到外部链接

typescript - 此重载签名与其实现签名不兼容

reactjs - useEffect 依赖项不重新渲染组件

所有属性的 JavaScript getter

ruby-on-rails - 如何在选择表单中使用 attr_accessor?