我有一个带有函数的类:
export class Order {
status: string;
public isNew(): boolean {
return status == 'NEW';
}
}
当我创建新订单时,我可以调用该函数:
let order = new Order();
order.isNew();
但是如果从我的后端检索订单并调用该方法,我会收到错误order.isNew is not a function
:
this.http.get('url')
.map(response => response.json() as Order)
.subscribe(order => order.isNew());
我做错了什么?
答案 0 :(得分:2)
您的示例代码中没有逻辑,一些简单的JSON神奇地成为您的Order对象。你必须转换它。 ' as'运算符不会这样做,这只是TypeScript级别的类型转换。那里没有实际转换。
如果您希望实现目标,请在Order上创建一个构造函数,该构造函数接受JSON并调用compile 'com.android.support:multidex:1.0.2'
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.4.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.android.support:support-v4:25.3.1'
compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.android.support:customtabs:25.4.0'
compile 'com.android.support:cardview-v7:25.4.0'
答案 1 :(得分:2)
您只是将您的回复转换为订单,而不是创建订单的对象。这就是你得到这个错误的原因。
让你的班级成为这样的
python get-pip.py
答案 2 :(得分:1)
因为在数据库中存储数据而不是函数。这意味着您的功能未保存,因此当您收到响应时,它不在其中。
此外,您只是将响应转换为订单,而不是创建新订单。这样做主要是为了在IDE中进行自动完成。
如果您希望它工作,您需要创建一个构造函数:
export class Order {
constructor(public status?: string) { this.status = status; }
public isNew(): boolean { return status == 'NEW'; }
}}
然后你需要从你的回复中创建一个对象:
this.http.get('url')
.map(response => new Order(response.json().status))
.subscribe(order => order.isNew());