【问题标题】:KnockoutObservable<number> returns string when bound to an input in typescript当绑定到打字稿中的输入时,KnockoutObservable<number> 返回字符串
【发布时间】:2014-09-30 12:48:52
【问题描述】:

我使用 Knockout 版本 3.2.0 及其来自 nuget 的 definitelyTyped 定义:

我有一个通过值绑定绑定到输入(类型号)的属性,属性定义是:

export class SomeClass {
    myProp: KnockoutObservable<number>;

   constructor() {
       myProp = ko.observable(0);
   }
}

现在,摆弄控制台,当类被初始化时,属性在调用时返回 0。但是,在我更改输入中的值后,该属性开始返回字符串,例如如果我将其更改为 2,则返回值为“2”。当将两个这样的属性加在一起时,这显然是一个问题。

var x = myinstance.myProp() + myinstance.myProp();

结果不是 4,正如您所期望的那样,结果实际上是“22”,即串联。

有什么合理的解决办法吗?这是淘汰赛中的错误还是记录在案的行为?

【问题讨论】:

标签: javascript knockout.js typescript


【解决方案1】:

您已将字符串值绑定到数值类型,并希望在绑定期间发生自动类型转换。这是行不通的,因为首先 KnockoutJS 是一个 Javascript 框架,它对 Typescript 的类型系统一无所知。

您可以将该属性设置为可写计算的可观察对象,也可以引入只读计算的可观察对象,通过 parseInt() 简单地运行“myProp”的当前值。

【讨论】:

  • 好吧,我至少希望打字稿会抛出一个运行时错误,即从数字类型返回一个字符串,因为这基本上使类型检查完全没用......另一方面,这可能真的很难实现,效率低下
  • 没有打字稿运行时错误之类的东西。所有的打字稿都发生在编译时
  • @Santhos 没有 Typescript 运行时。打字稿是所有编译器的“魔法”。
  • 这就是为什么我说这很难实现。您将需要生成更多代码并仅抛出通用错误。我知道 Typescript 在“构建时”编译为 javascript。
  • @Santhos 这是 knocout 的设计,因为其中没有类型的概念。然而,这是一个常见的问题,并且有一个共同的模式来解决它:knockoutjs.com/documentation/…
猜你喜欢
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2021-08-10
  • 2019-09-03
  • 2023-02-25
  • 2016-06-17
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多