Typescript 检索可观察对象的当前值

Typescript 检索可观察对象的当前值,typescript,knockout.js,Typescript,Knockout.js,如果我想得到一个可观测值,我通常把它作为一个函数来调用 比如说,我有一个模型,其可观测值如下 export interface ClientModel { name: KnockoutObservable<string>; age: KnockoutObservable<number>; } 下面是从一个模型转换到另一个模型的两个实现 A export function getServerModelJson(person: ClientModel) :

如果我想得到一个可观测值,我通常把它作为一个函数来调用

比如说,我有一个模型,其可观测值如下

export interface ClientModel {
    name: KnockoutObservable<string>;
    age: KnockoutObservable<number>;
}
下面是从一个模型转换到另一个模型的两个实现

A

export function getServerModelJson(person: ClientModel) : ServerModel {
   const personJson: ServerModel = {
      name: ko.unwrap(person.name),
      age: ko.unwrap(person.age)       
   }
   return personJson;
}
B

export function getServerModelJson(person: ClientModel) : ServerModel {
   const personJson: ServerModel = {
      name: person.name(),
      age: perosn.age()       
   }
   return personJson;
}
这两者之间是否有区别(将可观察对象称为函数与使用ko.unwrap)。推荐的方法是什么?如果字段是复杂类型,会发生什么变化。在这些情况下,如何进行转换

这两者之间是否存在差异(将可观察对象称为函数与使用
ko.unwrap

二:

  • 如果您直接将VM属性作为函数调用,那么它必须是函数(例如,可观察的或其他)。如果它是一个简单的非函数数据属性,您将得到一个错误。使用
    ko.unwrap
    ,它将在这种情况下为您提供简单的非函数数据属性的值(当然,也可以是可观察的值)

  • ko.unwrap
    添加一个函数调用和两个检查(对
    ko.unwrap
    的调用以及它所做的工作,以确定您传递的内容是否是可观察的)

  • 如果您知道它是可观察的,就像在您的示例中一样,那么没有真正的理由使用
    ko.unwap
    。(如果你知道它是不可见的,同样没有真正的理由使用
    ko.unwrap

    推荐的方法是什么

    这取决于你,基于你的属性是什么,以及你是否知道它们是可观察的

    如果字段是复杂类型,会发生什么变化。在这些情况下,如何进行转换

    什么都不做,只是用同样的方法来做。请注意,如果复杂类型的属性也是可观察的,则必须单独处理它们(
    ko.unwrap
    不深入)

    export function getServerModelJson(person: ClientModel) : ServerModel {
       const personJson: ServerModel = {
          name: person.name(),
          age: perosn.age()       
       }
       return personJson;
    }