xstate-tools
xstate-tools copied to clipboard
[TypeScript] typegen creating output which conflicts with @typescript-eslint/ban-types
Description
Typegen output is offending @typescript-eslint/ban-types
whose mission statement is
Some builtin types have aliases, some types are considered dangerous or harmful. It's often a good idea to ban certain types to help with consistency and safety.
-- README
Expected Result
Typegen output should not use incorrect types which are flagged by the @typescript-eslint/ban-types
rule
Actual Result
The specific error is:
Don't use `{}` as a type. `{}` actually means "any non-nullish value".
- If you want a type meaning "any object", you probably want `Record<string, unknown>` instead.
- If you want a type meaning "any value", you probably want `unknown` instead.
- If you want a type meaning "empty object", you probably want `Record<string, never>` instead.e
And can occur on invokeSrcNameMap
, eventsCausingServices
, eventsCausingGuards
, and eventsCausingDelays
:
Reproduction
Typegen doesn't run on codesandbox, but the following machine will trigger the above error on [email protected]
:
import { createModel } from 'xstate/lib/model';
export const testModel = createModel(
{
name: null as null | string,
},
{
events: {
setName: (name: string) => ({
name,
}),
reset: () => ({}),
},
},
);
export const surveyFormMachine = testModel.createMachine({
tsTypes: {},
id: 'test',
initial: 'idle',
context: testModel.initialContext,
states: {
idle: {},
},
on: {
reset: {
actions: 'resetContext',
},
setName: {
actions: 'setName',
},
},
});
Additional context
XState 4.29.0 statelyai.stately-vscode 1.5.6