interface MyPayload extends jwt.JwtPayload {
foo: string;
}
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;
}
[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 = 어쩌구 저쩌구
}
저런건 무슨 언어를 쓰던 강제로 캐스팅 하는데
그렇구만 감사
좀 더 이쁘게 하고싶으면 typeguard 함수 만들어서 쓰면됨
ㄳ
타입가드로 하는 방법 본문에 추가했는데, 저런 접근인가?
ㅇㅇ
감사룽
typeguard 으로 래핑하기?
ㄳ
타입가드로 하는 방법 본문에 추가했는데, 저런 접근인가?
맞음
감사룽
declare module... 활용하는 방법도 있음 - dc App