gpt4 book ai didi

typescript - 投不投

转载 作者:太空狗 更新时间:2023-10-29 17:57:57 27 4
gpt4 key购买 nike

我做了一个简单的 Http 调用:

http.get('/test/data/user.json').
map(res => <User> res.json()).
subscribe(user => {
console.log(typeof user);
console.log(user);
console.log(user.getName());
});

user.json 中有以下数据:

{
"name":"Robert"
}

和以下 User类:

export class User{
name:string;
lastName:string;
getName():string{
return this.name;
}
}

问题是我在控制台中得到的结果:

console.log(typeof user);

object

console.log(user);

Object {name: "Robert"}

console.log(user.getName());

Uncaught TypeError: user.getName is not a function

问题

这里的问题是我的对象是一个 object , 不是 User , 因此它不具有所有属性,也没有方法。

还尝试了基于 Promise 的调用和 user.json() as User而不是 <User> res.json()

编辑:与转换为接口(interface)不同,因为接口(interface)没有自己的行为。

最佳答案

如果要使用getName方法,需要在映射响应体时实例化一个新的User对象:

http.get('/test/data/user.json').
map(res => {
let body = res.json();
return new User(body.name, body.lastName);
})
subscribe(user => {
console.log(typeof user);
console.log(user);
console.log(user.getName());
});

User 类将进行如下调整:

export class User{
constructor(private name:string, private lastName:string) {}

getName():string{
return this.name;
}
}

转换对象不会向现有对象添加方法。响应的 json 方法将使用 JSON.parse 简单地解析响应主体并返回原始对象。

查看此插件:https://plnkr.co/edit/7lKHvArpayrMAzm5Xgk1?p=preview .

关于typescript - 投不投,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36181826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com