diff --git a/.changeset/grumpy-spiders-play.md b/.changeset/grumpy-spiders-play.md new file mode 100644 index 00000000..cf7d295f --- /dev/null +++ b/.changeset/grumpy-spiders-play.md @@ -0,0 +1,7 @@ +--- +'@xyflow/react': minor +'@xyflow/svelte': minor +'@xyflow/system': minor +--- + +Improve typing for Nodes diff --git a/packages/react/src/types/nodes.ts b/packages/react/src/types/nodes.ts index b07c0337..8dc213d7 100644 --- a/packages/react/src/types/nodes.ts +++ b/packages/react/src/types/nodes.ts @@ -12,7 +12,7 @@ import { NodeTypes } from './general'; */ export type Node< NodeData extends Record = Record, - NodeType extends string = string + NodeType extends string | undefined = string | undefined > = NodeBase & { style?: CSSProperties; className?: string; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index 2299f11f..f861c13b 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -16,7 +16,7 @@ export type InternalNode = InternalNodeBase = Record, - NodeType extends string = string + NodeType extends string | undefined = string | undefined > = NodeBase & { class?: ClassValue; style?: string; diff --git a/packages/system/src/types/nodes.ts b/packages/system/src/types/nodes.ts index b32d58c5..687f81ba 100644 --- a/packages/system/src/types/nodes.ts +++ b/packages/system/src/types/nodes.ts @@ -10,7 +10,7 @@ import { Optional } from '../utils/types'; */ export type NodeBase< NodeData extends Record = Record, - NodeType extends string = string + NodeType extends string | undefined = string | undefined > = { /** Unique id of a node. */ id: string; @@ -21,8 +21,6 @@ export type NodeBase< position: XYPosition; /** Arbitrary data passed to a node. */ data: NodeData; - /** Type of node defined in `nodeTypes`. */ - type?: NodeType; /** * Only relevant for default, source, target nodeType. Controls source position. * @example 'right', 'left', 'top', 'bottom' @@ -79,7 +77,15 @@ export type NodeBase< width?: number; height?: number; }; -}; +} & (undefined extends NodeType + ? { + /** Type of node defined in nodeTypes */ + type?: string | undefined; + } + : { + /** Type of node defined in nodeTypes */ + type: NodeType; + }); export type InternalNodeBase = Omit & { measured: {