1

我正在尝试根据以下规范从打字稿应用程序进行fetch() api 调用:

尝试在节点获取调用中对标头使用嵌套对象/数组值时出现以下错误。

(属性) RequestInit.headers?: HeadersInit Type '{ 'Content-Type': string; “内容处置”:字符串;'Memsource': { 'targetLangs': string[]; }; }' 不可分配给类型 'HeadersInit'。类型'{'Content-Type':字符串;“内容处置”:字符串;'Memsource': { 'targetLangs': string[]; }; }' 缺少类型 'Headers' 中的以下属性:forEach、append、delete、get 和 7 more.ts(2322) index.d.ts(45, 5):预期类型来自属性 'headers'在“RequestInit”类型上声明

下面是给出问题的代码行。

let project: Promise<Response> = await fetch(apiURL, {
    method: 'POST',
    headers: {
      'Content-Disposition': 'd:/_export/en_US.json',
      'Memsource': { 'targetLangs': ['fr_fr', 'es_es'] },
    },
  }).then(res => res.json())
    .then(json => json)
    .catch(err => console.log(err));

我应该怎么做才能解决问题?我不能使用这个符号吗?

4

1 回答 1

1

我非常努力地研究了这个问题,并了解到 HTTP 请求标头(或 Node-Fetch 中的 Headers 对象)仅支持简单的键/值对。这就是嵌套 json 值在这种情况下失败的原因。

我厌倦了通过在整个 json 周围加上引号并像下面这样转义所有内部引号来使嵌套值成为一个简单的 json 字符串,它就像魅力一样。

'Memsource': '{ \'targetLangs\': [\'fr_fr\', \'es_es\'] }'

一旦我确认它可以工作,我将其更改为 JSON.stringify() 语句并且效果很好。哦,我不得不在“Content-Disposition”值中进行一个小错误更正。

var customHeader = {'targetLangs': ['fr_fr', 'es_es'],};
let project: Promise<Response> = await fetch(apiURL, {
    method: 'POST',
    headers: {
      'Content-Disposition': 'filename=d:/_export/en_US.json',
      'Memsource': JSON.stringify(customHeader),
    },
  }).then(res => res.json())
    .then(json => json)
    .catch(err => console.log(err));

我想我可能会分享,以防其他人需要这些信息。

于 2019-11-18T08:05:12.557 回答