3

我正忙着创建一个meteor.d.ts来支持我在Meteor.js 平台上的Typescript 开发。当前状态可以在这里找到

话虽如此,我在抽象两种典型的 javascript 模式时遇到了问题。

第一个Template.myTemplate.events(eventMap),其中 myTemplate 可以由用户动态创建。

其次,能够将其映射不同的界面。Meteor 经常使用这种模式。例如,当调用 Meteor.methods(..methods..) 时,这些方法可以访问 this.isSimulation(),这在其他任何地方都不可见。

有点难以解释,所以看一下流星文档可能会有所帮助

知道如何声明这两种模式吗?

谢谢你。

4

1 回答 1

2

MyTemplate 解决方案 为用户提供两个界面。他可以用来将新模板添加到Template. 另一个允许他指定模板的功能:

interface ITemplate{

}
interface ITemplateStatic{
    events:Function;
}

declare var Template:ITemplate; 

// the user's code: 
interface ITemplate{
    myTemplate:ITemplateStatic; 
}
Template.myTemplate.events({}); 

这个解决方案 回答你关于this. 这样做的唯一方法是将签名公开为接口。然后,打字稿用户有责任在需要时获取正确的类型。无法隐式指定this函数内部的类型。

declare module meteor{
    interface IMethod{
        // A simple sample 
        isSimulation:boolean; 
    }
}

declare var Meteor;

// the user experience
Meteor.methods({
  foo: function (arg1, arg2) {
    var item:meteor.IMethod = this;  
    console.log(item.isSimulation); // now the signature is enforced
    return "some return value";
  }
});

当然,我将命名约定留给你:)

于 2013-08-19T11:51:09.723 回答