@reduxjs/toolkit
Version:
The official, opinionated, batteries-included toolset for efficient Redux development
47 lines (39 loc) • 1.64 kB
text/typescript
import { retry, type RetryOptions } from '@internal/query/retry'
import {
fetchBaseQuery,
type FetchBaseQueryError,
type FetchBaseQueryMeta,
} from '@internal/query/fetchBaseQuery'
describe('type tests', () => {
test('RetryOptions only accepts one of maxRetries or retryCondition', () => {
// Should not complain if only `maxRetries` exists
expectTypeOf({ maxRetries: 5 }).toMatchTypeOf<RetryOptions>()
// Should not complain if only `retryCondition` exists
expectTypeOf({ retryCondition: () => false }).toMatchTypeOf<RetryOptions>()
// Should complain if both `maxRetries` and `retryCondition` exist at once
expectTypeOf({
maxRetries: 5,
retryCondition: () => false,
}).not.toMatchTypeOf<RetryOptions>()
})
test('fail can be pretyped to only accept correct error and meta', () => {
expectTypeOf(retry.fail).parameter(0).toEqualTypeOf<unknown>()
expectTypeOf(retry.fail).parameter(1).toEqualTypeOf<{} | undefined>()
expectTypeOf(retry.fail).toBeCallableWith('Literally anything', {})
const myBaseQuery = fetchBaseQuery()
const typedFail = retry.fail<typeof myBaseQuery>
expectTypeOf(typedFail).parameter(0).toMatchTypeOf<FetchBaseQueryError>()
expectTypeOf(typedFail)
.parameter(1)
.toMatchTypeOf<FetchBaseQueryMeta | undefined>()
expectTypeOf(typedFail).toBeCallableWith(
{
status: 401,
data: 'Unauthorized',
},
{ request: new Request('http://localhost') },
)
expectTypeOf(typedFail).parameter(0).not.toMatchTypeOf<string>()
expectTypeOf(typedFail).parameter(1).not.toMatchTypeOf<{}>()
})
})