TypeScript Fetch response.Json<T> - 预期 0 个类型参数,但得到 1
Posted
技术标签:
【中文标题】TypeScript Fetch response.Json<T> - 预期 0 个类型参数,但得到 1【英文标题】:TypeScript Fetch response.Json<T> - Expected 0 type arguments, but got 1 【发布时间】:2018-12-22 19:05:22 【问题描述】:请原谅我的无知,但我正在尝试在 TypeScript 中实现 fetch 并且我一直在浏览示例但无法编译它。我是 TypeScript 和 Promise 的新手,我找到了这个例子:
How to use fetch in typescript
我正在尝试实现这一点:
private api<T>(url: string): Promise<T>
return fetch(url)
.then(response =>
if (!response.ok)
throw new Error(response.statusText)
return response.json<T>()
)
但是编译器显示错误:
[ts] 预期的类型参数为 0,但得到了 1。
我不确定问题出在哪里,但基本上我正在尝试实现一个类,它包装 API 调用以返回一个项目数组,并且我已经尝试了 async/await,但似乎没有什么能奏效。任何帮助将不胜感激。
【问题讨论】:
response.json()
不是通用方法,但您正在尝试使其通用
也许您正在寻找类似的东西来将其转换为特定类型的 Promise
例如 return response.json() as T
或 return <T>response.json()
【参考方案1】:
当我忘记此导入时,Express 遇到了同样的错误:
import Request, Response from 'express';
完整的例子变成:
// controllers/my-controller.ts
import Request, Response from 'express';
export const someMethod = async (req: Request, res: Response) =>
// ...
【讨论】:
【参考方案2】:我在上面的答案中发现了一个问题。 如果你有这样的 JSON 正文
"error" : " "message" : "some message" "
上面的代码将返回带有一键错误和 " "message" : "some message" " 的对象 所以最好用
JSON.Stringify(data)
【讨论】:
【参考方案3】:似乎签名不再存在,改为使用此代码:
response.json().then(data => data as T);
是的,这将返回一个强类型数据。 下面是完整的代码片段。
private api<T>(url: string): Promise<T>
return fetch(url)
.then(response =>
if (!response.ok)
throw new Error(response.statusText)
return response.json().then(data => data as T);
)
【讨论】:
以上是关于TypeScript Fetch response.Json<T> - 预期 0 个类型参数,但得到 1的主要内容,如果未能解决你的问题,请参考以下文章
从 fetch -> promise -> response 获取数据
TypeScript开发ReactNative之fetch函数的提示问题
如何将 fetch API 响应转换为 TypeScript 中的特定类型?