Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular 4.3 HttpClient获取类型为_Javascript_Angular_Http - Fatal编程技术网

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的对象,感谢您的解释和澄清。现在一切都变得更有意义了!