【发布时间】:2015-03-13 08:27:04
【问题描述】:
我在 TypeScript 中有一个类,它对服务进行 Ajax 调用,然后返回一个 JSON 对象;非常标准的东西。我希望 Ajax 调用的成功处理程序接受传入的 JSON 作为 TypeScript 中定义的实例化类,即我在这里使用强类型 Ajax。这主要是有效的。我发现我可以很好地接收传入的数据,但是不在 JSON 响应中的类的任何成员(属性和方法)在运行时都不存在于对象上。这是一些演示问题的代码。
module Samples {
export class MyData {
public A: number;
public B: number;
public get C(): number { return this.A + this.B; }
}
export class ClassDemo {
constructor(){
var ajaxSettings: JQueryAjaxSettings = {
url: "/api/build/sample", // Returns {"A":6,"B":4}
type: "GET",
dataType: "json",
cache: false
};
var jqXhr: JQueryXHR = $.ajax(ajaxSettings);
jqXhr.done(this.loadSucceeded);
jqXhr.fail( /* ... */);
}
private loadSucceeded(data: MyData, text: string, jqXhr: JQueryXHR) {
//
// Displays "6 + 4 = undefined"
//
alert(data.A + " + " + data.B + " = " + data.C);
}
}
}
var sample = new Samples.ClassDemo();
我认为这是有道理的,因为它是 JQuery 在运行时在 JavaScript 中创建对象,而不是 TypeScript,因此 JQuery 无法知道 TypeScript 类中的其他成员。我只是想知道是否有解决这个问题的好方法?出于显而易见的原因,我宁愿避免实例化我自己的类并手动将传入数据中的值复制到其中。
【问题讨论】:
标签: jquery ajax json typescript