【发布时间】: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