簡體   English   中英

為什么 TypeScript 報告“'string' 不能分配給類型 'RequestMode'”?

[英]Why is TypeScript reporting that "'string' is not assignable to type 'RequestMode'"?

我正在嘗試在 TypeScript 中使用 Fetch API,但由於某種原因我得到了

類型 'string' 不可分配給類型 'RequestMode'。

這是我的代碼

export class MainService{
  constructor(){}
  request(requestObj){
    if (!requestObj.url) {
      return 'Please provide the end point url'
    }
    else {
     let requestParam = {
        method: requestObj.method ? requestObj.method : 'GET',
        headers: new Headers(),
        mode: 'cors'
      };
      fetch(endPointHost+requestObj.url,requestParam).then(function(resp){
                                        //^^^ error thrown here
        resp.json();
      })
    }
     console.log(" Reached request");
  }

}

報告的錯誤是

TS2345:類型' { method: any; headers: Headers; mode: string; } { method: any; headers: Headers; mode: string; } { method: any; headers: Headers; mode: string; } “不是分配給類型的參數” RequestInit ”。 屬性“ mode ”的類型不兼容。 類型“ string ”不可分配給類型“ RequestMode ”。

這對我mode: 'cors' as RequestMode,mode: 'cors' as RequestMode,

這里的問題是requestParam可能會在以后不尊重RequestInit接口的情況下進行修改。 您可以在創建時聲明requestParam實現RequestInit

let requestParam: RequestInit = {
    method: requestObj.method ? requestObj.method : 'GET',
    headers: new Headers(),
    mode: 'cors'
};

或者將請求參數直接放在fetch調用中:

fetch(endPointHost+requestObj.url, {
    method: requestObj.method ? requestObj.method : 'GET',
    headers: new Headers(),
    mode: 'cors'
}).then(function(resp){
    resp.json();
})

我有同樣的錯誤:

mode: "no-cors",
headers: {
  Accept: "text/plain"
}

{ method: string; mode: string; headers: { Accept: string; }; }類型的參數{ method: string; mode: string; headers: { Accept: string; }; } { method: string; mode: string; headers: { Accept: string; }; }不可分配給“RequestInit”類型的參數。

屬性“模式”的類型不兼容。 類型 'string' 不可分配給類型 'RequestMode'.ts(2345)

修復后

headers: {
  Accept: "text/plain",
  RequestMode: "no-cors"
}

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM