Skip to content

Commit

Permalink
Fixed compatibility with the upcoming TS 5.4 (#4706)
Browse files Browse the repository at this point in the history
* Remove redundant `Compute`

* Fixed `StateValueMap` type

* fixed type errors

* add changeset
  • Loading branch information
Andarist authored Jan 26, 2024
1 parent 0afa535 commit 51b8442
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 18 deletions.
5 changes: 5 additions & 0 deletions .changeset/lucky-mice-lick.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'xstate': patch
---

Fixed compatibility with the upcoming TypeScript 5.4
4 changes: 2 additions & 2 deletions packages/core/src/stateUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ export function getStateNodes<
}
const subStateNodes = getStateNodes(
subStateNode,
stateValue[subStateKey]
stateValue[subStateKey]!
);

return allSubStateNodes.concat(subStateNodes);
Expand Down Expand Up @@ -684,7 +684,7 @@ export function transitionCompoundNode<
const childStateNode = getStateNode(stateNode, subStateKeys[0]);
const next = transitionNode(
childStateNode,
stateValue[subStateKeys[0]],
stateValue[subStateKeys[0]]!,
snapshot,
event
);
Expand Down
28 changes: 13 additions & 15 deletions packages/core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ export type Actions<
export type StateKey = string | AnyMachineSnapshot;

export interface StateValueMap {
[key: string]: StateValue;
[key: string]: StateValue | undefined;
}

/**
Expand Down Expand Up @@ -2352,21 +2352,19 @@ export type ToChildren<TActor extends ProvidedActor> =
// or maybe even `TActor["logic"]` since it's possible to configure `{ src: string; logic: SomeConcreteLogic }`
// TODO: consider adding `| undefined` here
Record<string, AnyActorRef>
: Compute<
ToConcreteChildren<TActor> &
{
include: {
[id: string]: TActor extends any
? ActorRefFrom<TActor['logic']> | undefined
: never;
};
exclude: {};
}[undefined extends TActor['id'] // if not all actors have literal string IDs then we need to create an index signature containing all possible actor types
: ToConcreteChildren<TActor> &
{
include: {
[id: string]: TActor extends any
? ActorRefFrom<TActor['logic']> | undefined
: never;
};
exclude: {};
}[undefined extends TActor['id'] // if not all actors have literal string IDs then we need to create an index signature containing all possible actor types
? 'include'
: string extends TActor['id']
? 'include'
: string extends TActor['id']
? 'include'
: 'exclude']
>;
: 'exclude'];

export type StateSchema = {
states?: Record<string, StateSchema>;
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ export function matchesState(
return false;
}

return matchesState(parentStateValue[key], childStateValue[key]);
return matchesState(parentStateValue[key]!, childStateValue[key]!);
});
}

Expand Down

0 comments on commit 51b8442

Please sign in to comment.