interface MyPayload extends jwt.JwtPayload {
foo: string;
}

const {foo} = jwt.verify(token, 'shhhhh') as MyPayload
console.log(decoded.foo) // bar

위 코드처럼 jwt.verfiy가 리턴하는 값이 JwtPayload임

JwtPayload는 다음과 같음.

export interface JwtPayload {
[key: string]: any;
iss?: string | undefined;
sub?: string | undefined;
aud?: string | string[] | undefined;
exp?: number | undefined;
nbf?: number | undefined;
iat?: number | undefined;
jti?: string | undefined;
}

jwt payload에 위 key뿐만 아니라 이메일 등의 정보를 저장하고 추출해서 쓴다고 했을 때,

타입을 잘 활용하려면 어떻게 함? 맨 위에처럼 타입 단언을 써야만 하나?


타입 가드로 래핑하기?

interface IPayload {

id: string;
}

function hasId(obj: any): obj is IPayload {
return (obj.id !== undefined);
}

const decoded = jwt.verify(token, process.env.JWT_SECRET!);
if(hasId(decoded)){
decoded.id = 어쩌구 저쩌구

}