我想做的事情确实类似于this https://stackoverflow.com/questions/12802383/extending-array-in-typescript and this https://stackoverflow.com/questions/12701732/typescript-augmenting-built-in-types除了我试图弄清楚如何将 ArrayExtension 放入模块中。
我正在尝试获得类似于 C# 扩展方法工作方式的东西,这样我就可以导入模块,并且我将拥有额外的方法。我提供的链接显示了如何扩展现有对象,但我无法弄清楚如何将其封装到模块中。
如果您的目标是像node.js这样的非浏览器环境,那么这是可能的,因为您将能够传递对模块的全局成员的引用,例如Array
,到其他模块。然后,这些其他模块可以使用额外的功能扩展传入的对象和/或其原型,这些功能只能由调用模块访问。其他模块也必须做同样的事情才能获得这些扩展;因此,由于导入是明确的,冲突被最小化。
然而,在浏览器环境中,情况并非如此,因为只有一个window
对象及其成员的任何更改都可以在任何地方使用。一旦您的任何模块扩展Array
这些扩展将可用于所有其他模块——增加了冲突的可能性并使代码更难以推理。
话虽如此,JS 中有模式,因此 TypeScript 也有模式,它们应该可以实现您想要的功能。其中一种模式是“mixin”模式,它允许您在对象上添加额外的功能instance基础。您可以将可重用的代码分离到 mixin 模块中,然后在需要时将其应用于对象,甚至在构造函数中自动应用。看一下这个,以获得不错的概述和实施示例:http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/ http://javascriptweblog.wordpress.com/2011/05/31/a-fresh-look-at-javascript-mixins/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)