对象可能未定义'

时间:2017-11-16 18:05:28

标签: javascript typescript casting

所以我在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 ) )抱怨标题值可能未定义。那个类型保护不应该保证该值不是未定义的吗?

2 个答案:

答案 0 :(得分:1)

错误来自您HttpHeaders的定义,该forEach?设为可选成员。

要解决此错误,只需删除interface HttpHeaders { get?: string set?: string forEach (Function): void }

,即可将其标记为非可选项
re

答案 1 :(得分:0)

考虑到你有option?这意味着参数是可选的,它将允许options未定义。即使您在其他函数中有代码来检查值,打字稿也不够智能,无法查看该代码并弄清楚它的作用。您的代码不是编译时安全的,但可能是运行时安全的。