在获取请求/返回期间,类型“ y”中缺少属性“ x”,但类型“ z”中必需

我有一个供异步功能使用的接口设置:

interface PostScriptTagResponse {
  script_tag : {
    readonly id : number,src : string,event : string,readonly created_at : string,readonly updated_at : string,display_scope? : string
  }
}

protected async createScriptTag(): Promise<PostScriptTagResponse|null> {
    try {
      const data: PostScriptTagResponse = await fetch(fetchUrl,{
        method: 'post',headers: {
          "X-Shopify-access-Token": this.generalToken,"Content-Type": "application/json"
        },body: {
          script_tag : {
            src: `${this.serverHost}/server/frontEndScriptControl.js`,event: "onload",display_scope: "online_store"
          }
        }
      }).json();

      return data.script_tag;
      // Property "script_tag" is missing in type {detailed interface spec here} 
      // but required in type "PostScriptTagResponse"
    }
    catch (e) {
      // removed
    }    
  }

我已经看过上面的内容,并认为格式正确,这不对吗?这是我希望从此提取请求中收到的示例响应:

https://help.shopify.com/en/api/reference/online-store/scripttag#create-2019-10
HTTP/1.1 201 Created
{
  "script_tag": {
    "id": 870402694,"src": "https://djavaskripped.org/fancy.js","event": "onload","created_at": "2019-10-16T16:14:18-04:00","updated_at": "2019-10-16T16:14:18-04:00","display_scope": "all"
  }
}
bhc2955 回答:在获取请求/返回期间,类型“ y”中缺少属性“ x”,但类型“ z”中必需

问题出在这三行之内:

programmer

您正在等待protected async createScriptTag(): Promise<PostScriptTagResponse|null> { const data: PostScriptTagResponse = await fetch(fetchUrl,{ return data.script_tag; 类型的data。然后,您返回该属性的属性(PostScriptTagResponse,很有可能不会再次从类型script_tag中返回。但是您的函数签名表明您想返回一个PostScriptTagResponse

因此可以将函数签名更改为如下形式:

PostScriptTagResponse

或按原样返回响应,并使用使用者中的protected async createScriptTag(): Promise<YourScriptTagType|null> { 属性。

.script_tag

由于您的函数名为 protected async createScriptTag(): Promise<PostScriptTagResponse|null> { return await fetch(fetchUrl,{ //... ,因此您很可能希望采用第一种方法

本文链接:https://www.f2er.com/3048865.html

大家都在问