【问题标题】:Getting a number from KO observable从 KO observable 获取一个数字
【发布时间】:2015-05-31 23:42:20
【问题描述】:

(对于这么多 Typescript 问题,我很抱歉 - 我刚刚开始使用 TS)

我有一个名为 index 的 KO observable。我只想把它的值加一。

原始JS代码:

data.index(data.index()+1);

这会产生编译错误:左侧必须是数字...所以我将值作为数字来获取。

var currentIndex: number = data.index();
data.index(currentIndex-1);

但是,我得到另一个编译错误:类型“{}”不可分配给类型“数字”。

我如何告诉 TS index() 正在返回一个数字?

【问题讨论】:

  • 我假设它不知道data.index() 正在返回什么,所以我建议在递增之前转换该值...data.index((<number>data.index())+1); 如果可行,我将作为答案发布
  • 是的,可行,会接受。

标签: typescript


【解决方案1】:

包含number 的淘汰赛 observable 可以这样定义:

var myObservable : KnockoutObservable<number>;

您应该指定 observable 将包含的类型。例如:

var data = {
    index : ko.observable<number>(),
    // etc..
};

这样当你调用data.index()时,编译器就知道返回的类型是数字:

data.index(data.index() + 1); // ok

【讨论】:

  • 啊,拯救泛型。
【解决方案2】:

它不知道data.index() 正在返回什么,所以我建议在递增之前转换该值...

data.index((<number>data.index())+1);

或者像上面的代码一样将代码分成两行......

var index = <number>data.index();
data.index(index + 1);

【讨论】:

  • 这种方法意味着必须在 everywhere 读取/写入 observable 的地方添加强制转换,这是一个时间槽,如果您忘记添加它,编译器将很难检查该代码。 David Sherret 的答案要好得多,因为它只需要 one 类型规范并且不需要强制转换。
  • @DCoder 我完全同意,我不熟悉淘汰赛,但正在解决问题中提出的问题。
猜你喜欢
  • 2020-09-14
  • 2017-03-21
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多