'요청'유형에 '권한'속성이 없습니다.

Aug 20 2020

이 코드를 고려하십시오.

  setContext(async (req, { headers }) => {
    const token = await getToken(config.resources.gatewayApi.scopes)

    const completeHeader = {
      headers: {
        ...headers,
        authorization:
          token && token.accessToken ? `Bearer ${token.accessToken}` : '',
      } as Express.Request,
    }

    console.log('accessToken: ', completeHeader.headers.authorization)
    return completeHeader
  })

다음 TS 오류를 생성합니다.

'요청'유형에 '권한'속성이 없습니다.

이것은 액세스를 시도 할 때 발생합니다 completeHeader.headers.authorization. 이 속성 authorization은 실제로 Express.request인터페이스에서 사용할 수 없습니다 . TypeScript가 리터럴 객체에서 유형을 추론 할 수 없다는 것이 이상합니다 string. 유형을 정의하지 않으면 as Express.Request안전하지 않은 할당에 대한 오류가 발생합니다.

이 필드에만 새 TS 인터페이스를 생성해야합니까? 아니면 잘못된 유형을 사용하고 있습니까? 이 필드 authorization는 토큰을 보내는 데 일반적으로 사용되는 필드처럼 보입니다.

답변

2 DaneBrouwer Aug 20 2020 at 18:59

당신이 강요하고 있기 때문에 그 이유는 completeHeader.headersExpress.Request유형입니다. 강제 유형은 추론 된 유형을 대체합니다.

할 수있는 일은 다음을 수행하여 강제 유형을 확장하는 것입니다.

as Express.Request & { authorization: string }

또는 완전히 새로운 유형을 만들 수 있습니다.

type AuthorizedRequest = Express.Request & { authorization: string };
...
as AuthorizedRequest