【问题标题】:TypeScript code similar to Revealing Module Pattern structure类似于 Revealing Module Pattern 结构的 TypeScript 代码
【发布时间】:2015-03-26 09:48:00
【问题描述】:

我想将我编写的一些 JavaScript 代码转换为 TypeScript。作为一名 JavaScript 开发人员,我对 TypeScript 语法和思维方式相当陌生。

让我头疼的是,我不得不将一些使用 Revealing Module Pattern 的代码转换成 TypeScript。

一个例子如下:

//JS Code
var obj;

//code...
(function(){
    function myFunction(){
        //do work
    }


    function MyOtherConstructor(){
        return {
            publicMethod: myFunction
        }
    }

    obj = new MyOtherConstructor();
})();

//use obj.publicMethod in code later

我想到的一种解决方法是:

//TypeScript code
var obj;

class MyOtherConstructor {
        private callback: any;
        constructor(f: any){
            this.callback = f;
        }
        publicMethod(): any{
            this.callback();
        }
}
//code...
(() => {
    function myFunction(){
        //do work
        console.log("Called myFunction");
    }
    obj = new MyOtherConstructor(myFunction);
})();

//use obj.publicMethod in code later

这行得通,但它很丑。

有什么建议可以让它变得更好吗?

【问题讨论】:

  • 将 myFunction 设为私有有什么问题?
  • 您的意思是让 myFunction 成为 MyOtherConstructor 的私有之一?如果是这种情况,我不能,因为我希望将 myFunction 独立用于匿名函数代码块。我不想先创建 obj 然后使用它的函数。我想在该代码块中按原样使用 myFunction 并创建一个具有 myFunction 方法的新 obj 对象。后面会在代码中用到。

标签: javascript typescript revealing-module-pattern


【解决方案1】:

如果您需要单个对象obj,则不要使用类。命名空间更适应:

namespace obj {
    function myFunction() {
        // ...
    }
    export var publicMethod = myFunction;
}

如果你喜欢保留这个类,那么这里有一个更简洁的代码:

class MyOtherConstructor {
    constructor(public publicMethod: () => void) {
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多