Javascript Angular 4.3 HttpClient获取类型为
我有以下服务:Javascript Angular 4.3 HttpClient获取类型为,javascript,angular,http,Javascript,Angular,Http,我有以下服务: @Injectable() export class ExerciseService { constructor(private http:HttpClient) {} public getExercises(): Observable<Exercise> { return this.http.get<Exercise>('http://localhost:8090/exercise/1'); } } inte
@Injectable()
export class ExerciseService {
constructor(private http:HttpClient) {}
public getExercises(): Observable<Exercise> {
return this.http.get<Exercise>('http://localhost:8090/exercise/1');
}
}
interface Exercise {
name: string;
}
@Injectable()
出口类健身服务{
构造函数(私有http:HttpClient){}
public getExercises():可观察{
返回此.http.get('http://localhost:8090/exercise/1');
}
}
界面练习{
名称:字符串;
}
我从这个电话中得到的是:
{defaultValue:10,id:1,名称“string”}
但是,因为我正在向调用传递一个类型,所以我希望只从这个函数中获取名称。
我刚刚开始学习Angular 4,我不知道有什么不对:/TypeScript中的类型是编译器(可能还有您的IDE)的静态编译时提示,以帮助您编写代码。您的服务器无法知道指定的类型,将一如既往地返回相同的数据。它甚至不知道调用时代码是用TypeScript编写的
如果需要,可以使用
map
手动转换响应或实现不同的端点。TypeScript中的类型是编译器(可能还有您的IDE)的静态编译时提示,以帮助您编写代码。您的服务器无法知道指定的类型,将一如既往地返回相同的数据。它甚至不知道调用时代码是用TypeScript编写的
如果需要,请使用
map
手动转换响应或实现不同的端点。类型转换get()不会从服务器响应中删除属性。那么这到底是做什么的?因为从我现在的角度来看,当我添加这个时,它不会改变任何东西。我认为它会将其解析到给定的接口。如果您想处理返回对象上的属性,而不进行类型转换,您必须通过类似括号符号data['someProperty']
的方式访问它们,以防止TypeScript编译器抛出错误,或者在某个时候手动转换它。正如Lazar Ljubenović在其回答中所述,如果您想在数据subscribe()
出现之前更改其形状,您可以利用map()
和其他RxJS操作符。谢谢类型强制转换get()不会从服务器响应中删除属性。那么这到底是做什么的呢?因为从我现在的角度来看,当我添加这个时,它不会改变任何东西。我认为它会将其解析到给定的接口。如果您想处理返回对象上的属性,而不进行类型转换,您必须通过类似括号符号data['someProperty']
的方式访问它们,以防止TypeScript编译器抛出错误,或者在某个时候手动转换它。正如Lazar Ljubenović在其回答中所述,如果您想在数据subscribe()
出现之前更改其形状,您可以利用map()
和其他RxJS操作符。谢谢据我所知,Angular 4.3中的新HttpClient不再使用“map”,因为默认的ParseType是JSON。这就是为什么我认为传递类型会将结果解析为该类型,然后将其传递给使用该服务的控制器。@JeroenDierckx如果您是正确的,httpClient假定响应将是json,除非另有说明(不再需要.json)。但是,它没有对应该解析哪些属性做出假设。Lazar建议使用类似.map(res=>{return{name:res.name}}})
的方法返回一个名为propertyLazar和LLai的对象,感谢您的解释和澄清。现在一切都变得更有意义了!据我所知,Angular 4.3中的新HttpClient不再使用“map”,因为默认的ParseType是JSON。这就是为什么我认为传递类型会将结果解析为该类型,然后将其传递给使用该服务的控制器。@JeroenDierckx如果您是正确的,httpClient假定响应将是json,除非另有说明(不再需要.json)。但是,它没有对应该解析哪些属性做出假设。Lazar建议使用类似.map(res=>{return{name:res.name}}})
的方法返回一个名为propertyLazar和LLai的对象,感谢您的解释和澄清。现在一切都变得更有意义了!