【问题标题】:TypeScript const and knockout pureComputedTypeScript const 和淘汰赛 pureComputed
【发布时间】:2019-03-31 08:26:08
【问题描述】:

我在函数problem 中引用this 对象时遇到编译 问题:

const c = {
  f() {
    console.log("hi");
  },

  problem: ko.pureComputed(() => {
    return this.f();
  }),
};

[ts] 包含箭头函数捕获隐含类型为 'any' 的 'this' 的全局值。

如果我将this 引用为c

const c = {
  f() {
    console.log("hi");
  },

  problem: ko.pureComputed(() => {
    return c.f();
  }),
};

[ts] 'c' 隐含类型为 'any',因为它没有类型注释,并且在其自己的初始化程序中直接或间接引用。

有人可以帮忙吗?并可能解释?谢谢。

【问题讨论】:

  • 您能否再澄清一下问题是什么?我不确定你想要达到什么输出。
  • 我从实际应用程序中提取了这个片段来演示我无法解决的编译器错误。我只是想在函数problem 中引用“当前对象”,但是无论我将其寻址为this 还是c,编译器都不满意。输出在这里无关紧要,只是如何告诉编译器我的意图。
  • 你有没有尝试过像class C { code here } 而不是const c = ...
  • @ingvar 好的,谢谢。但这是唯一的方法吗?我的意思是 - 当我需要一些具有一些封装属性和方法的单个对象时,我需要定义类并创建单例?这种开销看起来更像 Java,根本不像 JavaScript。但无论如何,谢谢。
  • 我对 TS 不是很熟悉,但是 AFAIK TS 在任何地方都需要严格的类型,它不允许使用通过文字或其他方式创建的对象...

标签: typescript knockout.js


【解决方案1】:

根据@ingvar 的评论,我找到了使用匿名类的可接受解决方案:

const c = new class {
  f() {
    console.log("hi");
  }

  problem = ko.pureComputed(() => {
    return this.f();
  }, this);
}();

现在编译成功了,语法简短,语义正确。

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 2012-06-06
    • 2015-06-02
    • 2013-12-18
    • 2018-10-15
    • 2018-05-26
    • 2013-06-15
    • 2013-04-10
    相关资源
    最近更新 更多