打字稿为什么不能 return header 在函数中?

Typescript why can't return header in function?

我是打字稿的新手。我有一个 headers 的值,我使用它效果很好。我尝试将它分离到另一个将被调用的函数中,但它不起作用。

这是没有被调用的代码

var headers: any = "";
try {
    const token = getCookie('XSRF-TOKEN');
    headers = {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'X-XSRF-TOKEN': token
    };
} catch (err) {
    console.log(err);
}
axios
    .get("https://localhost:", { getHeader })

在使用 headers 作为参数执行 .get 时,此文件有效。但是当我试图把它变成一个函数时。

export function getHeader () {
                  let headers: Record<string, string | null> = {}; // this line

                  const token = getCookie('XSRF-TOKEN');

                  headers = {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'X-XSRF-TOKEN': token
                  };



                  return headers
}

它抛出一个错误。

Type 'Record<string, string | null>' is not assignable to type 'AxiosRequestHeaders'.

'string' 索引签名不兼容。 类型 'string | null' 不可分配给类型 'string | number | boolean'。 类型 'null' 不可分配给类型 'string | number | boolean'.

我怎样才能让它像函数一样工作?

编辑:try catch 块不正确。已修复。

编辑:添加了带有错误消息的评论中的更新代码。

您正在尝试将整个函数传递给 axios 配置,而不是使用该函数的结果。

试试这个:

axios.get("https://localhost:", { headers: getHeader() })

换句话说,您的 getHeader 函数存在一些小问题 -

  • 您可以使用 Record 代替 any
  • 您不应将变量初始化为与预期不同的类型 - 为什么是空的 string?改为使用空对象
  • 最好使用 constlet 而不是 var
export function getHeader () {
                  let headers: Record<string, string> = {}; // this line

                  const token = getCookie('XSRF-TOKEN');
                  headers = {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'X-XSRF-TOKEN': token
                  };
                  } catch (err) {
                   console.log(err);
                  }

                  return headers
}