为什么 TypeScript 报告“'string' 不能分配给类型 'RequestMode'”?

brk*_*brk 5 javascript typescript

我正在尝试在 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");
  }

}
Run Code Online (Sandbox Code Playgroud)

报告的错误是

TS2345:“ { method: any; headers: Headers; mode: string; }”类型的参数不可分配给“ RequestInit”类型的参数。属性“ mode”的类型不兼容。类型“ string”不可分配给类型“ RequestMode”。

Fra*_*sou 9

这里的问题是,以后requestParam可能会以不尊重接口的方式进行修改。RequestInit您可以在创建时声明requestParam实现RequestInit

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

或者直接将请求参数放入调用中fetch

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


小智 8

这对我有用: mode: 'cors' as RequestMode,