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&lt;Response&lt;string&gt;&gt;,但我已经将 responseType 设置为“json”。

我如何正确地为这个 got.post 的响应分配类型?

【问题讨论】:

【参考方案1】:

got 支持泛型类型,因此您可以将您的类型 - NewAddressResponse 传递给 post() 进行推断

const  body  = await got.post<NewAddressResponse>('newAddress', 
  json: 
    userId
  
)

【讨论】:

以上是关于Typescript 定义 POST 请求响应的类型的主要内容,如果未能解决你的问题,请参考以下文章

POST 请求响应未定义,但 REQUEST 有效

TypeScript 中的 JQuery POST 请求

Fiddler script 获取http响应和post的请求body数据

如何不让struts2 不响应get请求,只响应post请求?

TypeScript POST API 请求错误 400 - 错误请求

在 Angular2 中使用 Typescript 读取 JSON