Typescript 定义 POST 请求响应的类型
Posted
技术标签:
【中文标题】Typescript 定义 POST 请求响应的类型【英文标题】:Typescript define the type of a POST request response 【发布时间】:2021-08-17 02:36:03 【问题描述】:我有一个使用 got 这样的帖子请求:
const got = got_.extend(
prefixUrl: serviceUrl,
responseType: 'json'
)
const body = await got.post('newAddress',
json:
userId
)
Body 始终是具有属性“newAddress”或具有属性“errorCode”和“newAddress”的对象。如果它是 newAddress 它只是一个字符串。如果它是错误的,它是一个带有错误代码和错误消息的对象
type ResponseError =
error:
errorCode: string
message: string
newAddress?: never
type AddressResponse =
newAddress: string
error?: never
type NewAddressResponse = AddressResponse | ResponseError
这是我目前使用 body 常量的方式:
if (body.error) throw new Error(JSON.stringify(body.error))
return res.json( newAddress: body.newAddress )
使用我的类型 NewAddressResponse 的正确方法是什么?
目前我试过这个:
const body : body: NewAddressResponse = await got.post ...
但我有错误:
Type 'Response<string>' is not assignable to type ' body: NewAddressResponse; '.
Types of property 'body' are incompatible.
Type 'string' is not assignable to type 'NewAddressResponse'.
上面说 got.post 返回类型 CancelableRequest<Response<string>>
,但我已经将 responseType 设置为“json”。
我如何正确地为这个 got.post 的响应分配类型?
【问题讨论】:
【参考方案1】:got
支持泛型类型,因此您可以将您的类型 - NewAddressResponse
传递给 post()
进行推断
const body = await got.post<NewAddressResponse>('newAddress',
json:
userId
)
【讨论】:
以上是关于Typescript 定义 POST 请求响应的类型的主要内容,如果未能解决你的问题,请参考以下文章
Fiddler script 获取http响应和post的请求body数据
如何不让struts2 不响应get请求,只响应post请求?