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
为非空。