Javascript Typescript fetch()';s头类型?

Javascript Typescript fetch()';s头类型?,javascript,typescript,Javascript,Typescript,我有点像: const request: Partial<Request> = { method, cache, redirect, headers: {} as Headers, }; if (...) { request.headers['content-type'] = contentType; } 为什么TS不能推断已经定义了标题?而不是部分,这将使您可以使用的所有属性都是可选的 Pick<Request, &

我有点像:

  const request: Partial<Request> = {
    method,
    cache,
    redirect,
    headers: {} as Headers,
  };

  if (...) {
    request.headers['content-type'] = contentType;
  }
为什么TS不能推断已经定义了
标题

而不是
部分
,这将使您可以使用的所有属性都是可选的

Pick<Request, "method" | "cache" | "redirect" | "headers">
拾取
或者定义一个对象并使用它的键从请求接口中选择静态类型检查

const request = {
  method: "GET",
  cache: "no-cache" as const,
  redirect: "follow" as const,
  headers: {} as Headers,
};

if (true) {
  request.headers["content-type"] = "text/html";
}


const myRequest: Pick<Request, keyof typeof request> = request;
const请求={
方法:“获取”,
缓存:“无缓存”作为常量,
重定向:“跟随”作为常量,
标题:{}作为标题,
};
如果(真){
request.headers[“content type”]=“text/html”;
}
const myRequest:Pick=request;
而不是
部分
,这将使您可以使用的所有属性都是可选的

Pick<Request, "method" | "cache" | "redirect" | "headers">
拾取
或者定义一个对象并使用它的键从请求接口中选择静态类型检查

const request = {
  method: "GET",
  cache: "no-cache" as const,
  redirect: "follow" as const,
  headers: {} as Headers,
};

if (true) {
  request.headers["content-type"] = "text/html";
}


const myRequest: Pick<Request, keyof typeof request> = request;
const请求={
方法:“获取”,
缓存:“无缓存”作为常量,
重定向:“跟随”作为常量,
标题:{}作为标题,
};
如果(真){
request.headers[“content type”]=“text/html”;
}
const myRequest:Pick=request;

您的条件是什么?它检查它是否不是GET请求,并且
contentType
是否真实。两个观察结果:1)应使用该方法访问标题值,而不是索引签名2)您仍然可以使用
部分
,您需要告诉TS编译器,使用非空断言运算符(例如,
request.headers!.get('content-type')
),您确定
头文件是非空的(例如,
request.headers!.get('content-type')
)。您的条件是什么?它检查它是否不是GET请求,并且
contentType
是否真实。两个观察结果:1)应使用该方法而不是索引签名访问标题值2)您仍然可以使用
部分
,您需要告诉TS编译器,使用非空断言运算符(例如,
request.headers!.get('content-type')
)可以确定
headers
为非空。