Files
NapCatQQ/.pnpm-store/v3/files/a7/d50992d90ebb5cdf65040c2b35a08c67b22179a5568a3bc79214b0f8c5b3b508dfa58680bc54144be90656bdd787c754ba4ae745cc1a96a804d8bff7027cd4
TanTan e311ca3275
Build NapCat Artifacts / Windows Loader Test (push) Canceled after 0s
Build NapCat Artifacts / Type Check & Test (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Framework (push) Canceled after 0s
Build NapCat Artifacts / Build NapCat.Shell (push) Canceled after 0s
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

78 lines
2.2 KiB
Plaintext

import type { ActionReducerMapBuilder, Reducer } from '@reduxjs/toolkit'
import { createAction, createReducer } from '@reduxjs/toolkit'
describe('type tests', () => {
test('createReducer() infers type of returned reducer.', () => {
const incrementHandler = (
state: number,
action: { type: 'increment'; payload: number },
) => state + 1
const decrementHandler = (
state: number,
action: { type: 'decrement'; payload: number },
) => state - 1
const reducer = createReducer(0 as number, (builder) => {
builder
.addCase('increment', incrementHandler)
.addCase('decrement', decrementHandler)
})
expectTypeOf(reducer).toMatchTypeOf<Reducer<number>>()
expectTypeOf(reducer).not.toMatchTypeOf<Reducer<string>>()
})
test('createReducer() state type can be specified explicitly.', () => {
const incrementHandler = (
state: number,
action: { type: 'increment'; payload: number },
) => state + action.payload
const decrementHandler = (
state: number,
action: { type: 'decrement'; payload: number },
) => state - action.payload
createReducer(0 as number, (builder) => {
builder
.addCase('increment', incrementHandler)
.addCase('decrement', decrementHandler)
})
// @ts-expect-error
createReducer<string>(0 as number, (builder) => {
expectTypeOf(builder.addCase)
.parameter(1)
.not.toMatchTypeOf(incrementHandler)
expectTypeOf(builder.addCase)
.parameter(1)
.not.toMatchTypeOf(decrementHandler)
})
})
test('createReducer() ensures state type is mutable within a case reducer.', () => {
const initialState: { readonly counter: number } = { counter: 0 }
createReducer(initialState, (builder) => {
builder.addCase('increment', (state) => {
state.counter += 1
})
})
})
test('builder callback for actionMap', () => {
const increment = createAction<number, 'increment'>('increment')
const reducer = createReducer(0, (builder) =>
expectTypeOf(builder).toEqualTypeOf<ActionReducerMapBuilder<number>>(),
)
expectTypeOf(reducer(0, increment(5))).toBeNumber()
expectTypeOf(reducer(0, increment(5))).not.toBeString()
})
})