所以我在typecript 2.5.3上的vscode和以下代码:
export function isHttpHeaders ( headers: HttpHeaders | undefined ):
headers is HttpHeaders {
return !!headers && !!headers.get && !!headers.set
}
function headersToHeadersSpec ( options?: RequestOptionsArgs ):
Headers | undefined {
const { headers } = options as RequestOptionsArgs
if ( isHttpHeaders( headers ) ) {
const reqHeaders = new Headers()
headers.forEach( reqHeaders.set.bind( reqHeaders ) )
return reqHeaders
} else {
return undefined
}
}
当我尝试编译时,由于某种原因,行headers.forEach( reqHeaders.set.bind( reqHeaders ) )
抱怨标题值可能未定义。那个类型保护不应该保证该值不是未定义的吗?
答案 0 :(得分:1)
错误来自您HttpHeaders
的定义,该forEach
将?
设为可选成员。
要解决此错误,只需删除interface HttpHeaders {
get?: string
set?: string
forEach (Function): void
}
:
re
答案 1 :(得分:0)
考虑到你有option?
这意味着参数是可选的,它将允许options
未定义。即使您在其他函数中有代码来检查值,打字稿也不够智能,无法查看该代码并弄清楚它的作用。您的代码不是编译时安全的,但可能是运行时安全的。