我有一个供异步功能使用的接口设置:
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"
}
}
答案 0 :(得分:1)
问题出在这三行之内:
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, { //...
,因此您很可能希望采用第一种方法