【发布时间】:2016-02-20 16:50:01
【问题描述】:
我对 Typescript 还是很陌生,在让我的代码正常工作时遇到了一些问题。我有以下接口/类结构
interface IInterface {
id : number;
method() : string;
}
class IClass implements IInterface {
id : number;
method() : string { return "foo";}
}
现在我想通过以下调用从网络服务获取一些数据
$.get("/some/url", (data : Array<IInterface>) => {
for (var i = 0; i < data.length; i++) {
console.log(data[i].id);
console.log(data[i].method());
}
});
虽然这在打字稿中编译得非常好,并且所有属性都设置得非常好,但我得到一个运行时 TypeError data[i].method is not a function
所以现在我的问题是:我怎样才能正确地转换/分配(?)这个,以便这些方法也可以在生成的 JavaScript 中使用?
更新 根据要求:我从网络服务获得的数据转储。
data = [{id : 1}, {id : 2}, ...]
当然,这是一个简化的例子,真正的类/接口有更多的属性(它们都被正确分配),但也只有一种方法(到目前为止,当我开始工作时,还会有更多的属性)。
【问题讨论】:
-
你缺少一个括号:
console.log(data[i].method()); -
@FlorianTopf 抱歉打错了。括号包含在原始代码中(没有它,它将无法编译)。我更新了我的问题。
-
你能转储整个
data[i]对象吗? -
我不确定你所说的转储是什么意思。我从 web 服务收到的数据 [i] 基本上只是一个带有一堆属性的普通对象。请看我的更新
-
好的,那么您需要映射结果并创建新类:
data.map((d) => return new IClass(d.id)).类似的东西。但是你需要在IClass中引入一个构造函数
标签: casting typescript