无法在 Angular 5 中以字符串形式获取 http 响应

gch*_*oni 4 javascript rxjs typescript angular

鉴于源 Angular Service 代码

@Injectable()
export class HomeContentService {

  constructor(private http: HttpClient) { }

  getContent(): Observable<string> {

    let fileURI = '/assets/content/home.md';
    let opt = { responseType: 'text' };
    return this.http.get<string>(
      fileURI,
      opt
    );

  }
Run Code Online (Sandbox Code Playgroud)

调用getContent()应该返回一个Observable<string>. 但是,当我运行时ng serve,我得到Type 'string' is not assignable to type 'json'.

经过几次尝试,webpack 似乎编译得很好,我没有做任何更改,但是只要我关闭进程并ng serve再次尝试,问题就会再次发生。

我想我的设置有问题responseType: 'text',但我不知道是什么。谷歌搜索也没有帮助。

有任何想法吗?

Igo*_*gor 5

您必须内联选项,因为这是 TypeScript 转译器可以推断您想要返回 type 的唯一方法Observable<string>

getContent(): Observable<string> {
  let fileURI = '/assets/content/home.md';
  return this.http.get(fileURI, { responseType: 'text' });
}
Run Code Online (Sandbox Code Playgroud)

另请参阅无法设置 Http ResponseType #18586,请参阅alxhub.


San*_*liz 0

我认为你没有指定地图。尝试这个:

getContent ( ) : Observable< string > {
return this.http.get( YOUR REF )
       .map((res:Response) => res.text())
       .catch((error:any) => Observable.throw(error.json().error || 'Server error'));
} 
Run Code Online (Sandbox Code Playgroud)

在 res.text 中指定类型,如果响应是 json 则为“res.Json()”

为糟糕的英语而悲伤