在一个Angular应用程序中,我有一个服务,它有一个从REST服务器获取简单字符串方法。此代码无法编译:
getText(): Promise<String> {
const httpOptions = {
headers: new HttpHeaders({'Content-Type': 'application/json', accept: 'text/plain'}),
responseType: 'text'
}
return firstValueFrom(this.httpClient.get(this.endPoint + this.publicUrl, httpOptions))
}
这也不是:
getText(): Promise<String> {
const httpOptions: Object = {
headers: new HttpHeaders({'Content-Type': 'application/json', accept: 'text/plain'}),
responseType: 'text'
}
return firstValueFrom(this.httpClient.get(this.endPoint + this.publicUrl, httpOptions))
}
但这编译和工作:
getText(): Promise<String> {
return firstValueFrom(this.httpClient.get(this.endPoint + this.publicUrl, {
headers: new HttpHeaders({'Content-Type': 'application/json', accept: 'text/plain'}),
responseType: 'text'
}))
}
为什么我不能在HttpClient.get()
中使用变量作为第二个参数?
谢谢
1条答案
按热度按时间gr8qqesn1#
httpClient.get
有一个带有15个重载的签名。它们中的一些依赖于
responseType
的类型。当你写
httpOptions
被推断为{headers: HttpHeaders; responseType: string;}
。正如你所看到的,
responseType
被加宽到string
,这就是为什么TS无法找到你正在寻找的正确重载。使用
as const
可以解决这里的问题,responseType
将不再被加宽并定义为responseType: 'test'
。