【问题标题】:Using lawnchair with Typescript使用带有 Typescript 的草坪椅
【发布时间】:2013-03-18 18:33:02
【问题描述】:

遇到了一个简单的问题,在使用 typescript 的“this”范围的类似问题中涉及到了这个问题。

我有一项存储服务,可以为我的本地存储问题包裹草坪椅。现在我正在将此代码迁移到 Typescript 我遇到了一个我无法解决的问题。

public GetAll(callback: Function) {
           Lawnchair({ name: this.storeName }, function () {
                this.all(callback);
            });
        };

现在在上面的示例中,草坪椅使 this 成为您正在操作的实际商店,但 Typescript 将使其成为您正在使用的类的实例。那么有没有办法解决这个问题呢?

== 编辑 ==

稍微更新了问题示例,以免与底层的草坪椅方法和周围的类方法混淆。

这是我在尝试编译时遇到的错误:

类型的值不存在属性“all” 'LawnchairStorageService'

这是正确的,该方法不存在于包含的类实例中,它存在于草坪关闭范围的上下文中this

【问题讨论】:

  • 这是生成代码的问题(运行时),还是 TypeScript 不理解“this”是什么类型(编译时)?如果是前者,附上生成的代码并说明它有什么问题是有帮助的。如果是后者,则将“this”转换为您所知道的应该这样做。
  • 是后者,打字稿编译器抛出错误,我不认为强制转换 this 会起作用,因为它仍然是底层类实例而不是草坪椅实例.不过,我会用错误更新问题!
  • @jcfx 是的,可以编译,我还没有让应用程序进入 working 状态,所以我可以测试编译后的打字稿,但它应该在运行时工作,因为它只会包装底层的自执行代码。
  • 好东西。我认为 Ryan 或 Steve 可能会提出一个更优雅的解决方案,但如果这能让你继续前进,那就太好了。让我知道它是否真的运行,如果它运行,我会把它写下来作为答案。

标签: javascript local-storage typescript lawnchair


【解决方案1】:

您是否尝试过以下方法:

public Exists(uniqueIdentifier: string, callback: Function) {
           var me = this;
           Lawnchair({ name: this.storeName }, function (me) {
                me.exists(uniqueIdentifier, callback);
            });
        };

【讨论】:

  • 这不起作用,因为您的 me 变量将等于包含类的实例,而不是创建的草坪椅实例。因此,您基本上执行的逻辑与问题示例中所示的逻辑完全相同,但方式更为冗长。
【解决方案2】:

正如上面的 cmets 所述,它可以编译,我认为它应该可以运行:

public GetAll(callback: Function) {
    return function (callback){
        Lawnchair({ name: this.storeName }, function () {
            this.all(callback);
        });
    }(callback);
};

...但我怀疑其他人可能会提出更优雅的解决方案。

【讨论】:

  • 您可以得到答案,如果确实有更好的解决方案,我会移动答案,但无论哪种方式,您都希望得到一些支持:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多