typescript无法使用react-native将标头添加到fetch api

时间:2017-12-11 13:36:37

标签: json typescript react-native fetch-api

我正在使用来自react-native的Fetch API,我正在使用typescript。 我的代码如下所示:

let responseLogin = await fetch('http://url_example', {
        method: 'POST',
        headers: {'Content-Type':'application/json'},
        body: requestBody
    });

但是我得到以下错误:标题是:

 Argument of type '{ method: string; headers: { 'Content-Type': string; }; body: string; }' is not assignable to parameter of type 'RequestInit'.
  Types of property 'headers' are incompatible.
    Type '{ 'Content-Type': string; }' is not assignable to type 'Headers | string[][]'.
      Object literal may only specify known properties, and ''Content-Type'' does not exist in type 'Headers | string[][]'.

我还试图创建一个自定义标题,但没有任何运气:

    let requestHeaders = new Headers();
        requestHeaders.set('Content-Type', 'application/json');
        // I have also tried adding this at the end but no luck 
        // requestHeaders.get('Content-Type');

我怎么能为此添加标题?因为我找不到任何方法来实现这一点,我不知道问题是什么。如果我在邮递员中测试这些,我得到200响应,在这里我得到401响应。 我还尝试过这个库来添加自定义标题:https://www.npmjs.com/package/fetch-headers

我用: Visual Studio代码1.81.1 " react-native":" 0.50.0", "打字稿":" 2.6.1"

4 个答案:

答案 0 :(得分:5)

您的构建包含哪些TypeScript库?看起来您对headers属性的定义是错误的。在TypeScript 2.6.2中,headers属性的类型为HeadersInit,其定义为: type HeadersInit = Headers | string[][] | { [key: string]: string };

答案 1 :(得分:3)

您可以尝试将其键入为HeadersInit吗?

let requestHeaders: HeadersInit = new Headers();
requestHeaders.set('Content-Type', 'application/json');

let responseLogin = await fetch('URL', {
  method: 'POST',
  headers: requestHeaders,
  body: requestBody
});

如果没有,您可以显示在问题中显示的Headers()构造函数启动该错误时遇到的错误吗?

答案 2 :(得分:2)

我已经解决了这个问题:

let requestHeaders: any = { 'Content-Type': 'application/json' };
let responseLogin = await fetch('URL', {
  method: 'POST',
  headers: requestHeaders,
  body: requestBody
});

我所要做的就是忽略该错误消息,因为JS正确解释了语法,只有typescript没有,我通过创建一个存储这两个字符串的变量来做到这一点。

答案 3 :(得分:1)

我解决了导入这样的问题

import fetch,{Headers} from'node-fetch';