КОНТЕКСТ
Я относительно новичок в Typescript и получил ошибку, которую совсем не понимаю. Мне интересно, может ли кто-нибудь объяснить, почему что-то подобное может произойти, когда, как мне кажется, этого не должно быть.
Если я сделаю createJwksContext
return any
, эта ошибка исчезнет. В настоящее время я делаю это, и мне не нужно, чтобы это было специально напечатано. Но было бы неплохо понять, что WTF продолжается!
ПРОБЛЕМА
Полная ошибка:
Argument of type 'ICreateJwksContextReturn' is not assignable to parameter of type 'APIGatewayProxyEvent'.
Type 'ICreateJwksContextReturn' is missing the following properties from type 'APIGatewayProxyEvent': body, headers, multiValueHeaders, httpMethod, and 8 more.
const authCheck = await authInstance.checkScopesAndResolve(mockedEvent, ['test scope']);
RELEVANT CODE
ТИПЫ
export interface IAuth {
checkScopesAndResolve: (arg0: APIGatewayProxyEvent, arg1: [string]) => Promise<boolean>;
}
export interface IModifiedObject {
[name: string]: string
}
export interface IJwksClientMock {
start: () => void;
stop: () => Promise<void>;
kid: () => string;
token: (token: {}) => string;
}
export interface ICreateJwksContextReturn {
accessToken: string;
jwksMock: IJwksClientMock;
}
ФУНКЦИИ
function customMockedEvent(modificationObject: IModifiedObject): APIGatewayProxyEvent {
return {
...
}
}
function createJwksContext(userObject: { sub: string, scope: string} = { sub: 'test user', scope: 'test scope'}): ICreateJwksContextReturn {
....
return { accessToken, jwksMock };
}
TEST - где ошибка на самом деле происходит.
it('Returned - No scopes supplied!', async (done) => {
const {accessToken, jwksMock} = await createJwksContext({
sub: 'test user',
scope: '',
})
done();
console.log('accessToken', accessToken);
const accessToken1 = 'blad'
const mockedEvent: APIGatewayProxyEvent = customMockedEvent({
authorization: `Bearer ${accessToken1}`
}) as APIGatewayProxyEvent;
console.log('mockedEvent', mockedEvent);
const authInstance = new Auth();
expect( async () => {
await authInstance.checkScopesAndResolve(mockedEvent, ['test scope']);
done();
}).toThrow('No scopes supplied!');
jwksMock.stop();
})