【发布时间】:2017-11-16 18:05:27
【问题描述】:
所以我在 typescript 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 ) ) 行抱怨标题值可能未定义。类型保护不应该保证值不是未定义的吗?
【问题讨论】:
-
你确定
HttpHeaders定义中没有undefined,类似于type HttpHeaders = Array<...> | undefined -
@julesRandolph HttpHeaders 是一个接口,具有许多可选属性。
-
我无法使用稍微修改的版本进行复制,在该版本中我在本地定义了您使用的接口和类。
-
我发现了你的问题:原因是
forEach属性在接口HttpHeaders中是可选的(给定后挂的?)。作为旁注,您的保护函数会检查可选属性以断言传递的对象是HttpHeaders类型,这很奇怪。
标签: javascript typescript casting