【问题标题】:Will Typescript help me to decide which function gets called?Typescript 会帮助我决定调用哪个函数吗?
【发布时间】:2012-11-01 22:22:22
【问题描述】:

我的目录结构如下:

/Admin/Grid
   abc.ts  // this file contains the one function abc()
   xxx.ts  // this file contains the one function xxx()

/Admin/Dialog
   abc.ts  // this file contains the one function abc()

我将所有三个 javascript 都加载到我的浏览器中。

函数 xxx() 如下所示:

function xxx() {
   // do abc
   abc();
}

有没有一种使用打字稿的方法,我可以告诉函数 xxx 执行 /Admin/Dialog 目录中文件内的函数 abc?

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    如果您引用所有这些文件并且您的函数都在全局范围内(看起来它们来自您的问题),那么您可以从任何地方调用这些函数。

    您可能想要研究的 TypeScript 的一个好处是使用模块和类来封装函数和数据组,这有助于您组织程序并保持全局范围不受您自己的函数和变量的影响。

    所以回到你的问题,如果你想要两个同名的函数,你不能把它们都放在同一个范围内——你需要:

    • 重命名一个
    • 将它们包含在类/模块中
    • 仅包含包含 abc 函数的文件之一

    这是基于您的问题的示例。

    class OtherClass {
        abc () {
    
        }
    }
    
    class MyClass {
        xxx () {
            var oc = new OtherClass();
            oc.abc();
        }
    }
    
    var mc = new MyClass();
    
    mc.xxx();
    

    【讨论】:

    • 如果可能,第二个建议是我认为对我最感兴趣的。如果当我使用“using ...”时,模块允许我使用 C# 中的某些功能,那就太好了。不知道如何使用模块,因为这是我迄今为止没有使用过的东西。
    • 是的 - 模块包含类,所以它们有点像 C# 命名空间。类包含函数和数据,就像 C# 类一样。您使用参考注释而不是 using 语句。
    • 谢谢,但您能否添加到您的示例中。我认为您在编辑时可能会错过,因为您的示例与我的示例相同。例如,我将如何命名和使用模块?我在stackoverflow上环顾四周,其他答案让我很困惑。刚刚注意到你更新了。你正在使用类。如果我使用模块会有所不同吗?
    • 一个模块是一组类 - 如果你让我知道每个函数的作用,我可以建议一个结构并提供一个代码示例。
    【解决方案2】:

    我会用 JavaScript 回答你:

    基本上没有办法告诉 xxx() 执行 /Admin/Dialog/abc.ts 中的 abc()。这是因为当 /Admin/Dialog/abc.ts 被加载时,它会覆盖 /Admin/Grid/abc.ts 的 abc()。

    你可以做的是这样的:

    /Admin/Grid/abc.ts

    var grid = {
        abc: function() {
            ....
        }
    }
    

    /Admin/Dialog/abc.ts

    var dialog= {
        abc: function() {
            ....
        }
    }
    

    然后在 xxx():

    function xxx() {
       grid.abc();
    }
    

    这样对话框的 abc() 不会覆盖网格的 abc()。

    编辑:在 TypeScript 中:
    /Admin/Grid/abc.ts

    class Grid {
        abc() {
        }
    }
    

    /Admin/Dialog/abc.ts

    class Dialog {
        abc() {
        }
    }
    

    然后在 xxx.ts:

    class Samantha {
        xxx () {
            var grid = new Grid ();
            grid.abc();
        }
    }
    
    var me = new Samantha ();
    me .xxx();
    

    希望这会有所帮助!

    【讨论】:

    • 这和使用Modules类似吗?
    • 这类似于在 TypeScript 中使用类 - 生成的 JavaScript 看起来与此类似。
    • @Naor - 到目前为止感谢您的帮助。但是,您使用 Javascript 进行编码,而我的编码全部在 Typescript 中完成。有没有打字稿的方法来做到这一点。模块还是类?
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2011-09-10
    相关资源
    最近更新 更多