Skip to content

Fix D3 type errors - #418

Merged
mhkeller merged 4 commits into
mhkeller:mainfrom
rgieseke:d3-type-fixes
Jul 17, 2026
Merged

Fix D3 type errors#418
mhkeller merged 4 commits into
mhkeller:mainfrom
rgieseke:d3-type-fixes

Conversation

@rgieseke

Copy link
Copy Markdown
Contributor

There are a few d3 related type errors when running pnpm check. They can be fixed by explicitly installing the types for the respective sub libraries. This PR also adds some any where the type checker complained about missing ones.

The alternative would be to import them from d3 directly, but I think it's nicer to be clearer where something is imported from. Maybe we could remove @types/d3 and only do explicit imports.

Now we do this (but need the explicit import):

import('d3-scale').ScaleLinear<any, any>

This might also work but I think it's not as clean.

import('d3').ScaleLinear<any, any>

The error messages below are no longer appearing with pnpm check | grep -A 4 d3.

Error messages from pnpm check
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScaleLinear'. 
/**
 * @typedef {import('d3-scale').ScaleLinear<any, any> |
 *           import('d3-scale').ScaleTime<any, any> |

./layercake/src/lib/utils/padScale.js:10:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScaleTime'. 
 * @typedef {import('d3-scale').ScaleLinear<any, any> |
 *           import('d3-scale').ScaleTime<any, any> |
 *           import('d3-scale').ScalePower<any, any> |

./layercake/src/lib/utils/padScale.js:11:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScalePower'. 
 *           import('d3-scale').ScaleTime<any, any> |
 *           import('d3-scale').ScalePower<any, any> |
 *           import('d3-scale').ScaleLogarithmic<any, any> |

./layercake/src/lib/utils/padScale.js:12:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScaleLogarithmic'. 
 *           import('d3-scale').ScalePower<any, any> |
 *           import('d3-scale').ScaleLogarithmic<any, any> |
 *           import('d3-scale').ScaleSymLog<any, any> |

./layercake/src/lib/utils/padScale.js:13:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScaleSymLog'. 
 *           import('d3-scale').ScaleLogarithmic<any, any> |
 *           import('d3-scale').ScaleSymLog<any, any> |
 *           import('d3-scale').ScaleOrdinal<any, any> |

./layercake/src/lib/utils/padScale.js:14:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScaleOrdinal'. 
 *           import('d3-scale').ScaleSymLog<any, any> |
 *           import('d3-scale').ScaleOrdinal<any, any> |
 *           import('d3-scale').ScaleBand<any> |

./layercake/src/lib/utils/padScale.js:15:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScaleBand'. 
 *           import('d3-scale').ScaleOrdinal<any, any> |
 *           import('d3-scale').ScaleBand<any> |
 *           import('d3-scale').ScalePoint<any> |

./layercake/src/lib/utils/padScale.js:16:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScalePoint'. 
 *           import('d3-scale').ScaleBand<any> |
 *           import('d3-scale').ScalePoint<any> |
 *           import('d3-scale').ScaleSequential<any, any> |

./layercake/src/lib/utils/padScale.js:17:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScaleSequential'. 
 *           import('d3-scale').ScalePoint<any> |
 *           import('d3-scale').ScaleSequential<any, any> |
 *           import('d3-scale').ScaleDiverging<any, any>} Scale

./layercake/src/lib/utils/padScale.js:18:33
Error: Namespace '"./layercake/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/index"' has no exported member 'ScaleDiverging'. 
 *           import('d3-scale').ScaleSequential<any, any> |
 *           import('d3-scale').ScaleDiverging<any, any>} Scale
 */

./layercake/src/lib/utils/padScale.js:54:38
Error: Parameter 'd' implicitly has an 'any' type. 
--
Error: Namespace '"./layercake/node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/index"' has no exported member 'CurveFactory'. (js)
	 * @property {string} [fill='#ab00d610'] - The shape's fill color. This is technically optional because it comes with a default value but you'll likely want to replace it with your own color.
	 * @property {import('d3-shape').CurveFactory} [curve] - An optional D3 interpolation function. See [d3-shape](https://github.com/d3/d3-shape#curves) for options. Pass this function in uncalled, i.e. without the open-close parentheses.
	 */

./layercake/src/_components/Area-D3.svelte:24:8
Error: Parameter 'd' implicitly has an 'any' type. (js)
--
Error: Namespace '"./layercake/node_modules/.pnpm/d3-hierarchy@3.1.2/node_modules/d3-hierarchy/src/index"' has no exported member 'HierarchyNode'. (js)

	/** @typedef {import('d3-hierarchy').HierarchyNode} HierarchyNode */

./layercake/src/_components/CirclePack.html.svelte:38:30
Error: Parameter 'r' implicitly has an 'any' type. (js)
		valueKey = 'value',
--
Error: Namespace '"./layercake/node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/index"' has no exported member 'CurveFactory'. (js)

	/** @typedef {import('d3-shape').CurveFactory} CurveFactory */
	/**

./layercake/src/_components/Map.svg.svelte:45:27
Error: Parameter 'feature' implicitly has an 'any' type. (js)
--
Error: Namespace '"./layercake/node_modules/.pnpm/d3-shape@3.2.0/node_modules/d3-shape/src/index"' has no exported member 'CurveFactory'. (js)

	/** @typedef {import('d3-shape').CurveFactory} CurveFactory */
	/**

./layercake/src/routes/_components/MultiLine.svelte:39:18
Error: Parameter 'data' implicitly has an 'any' type. (js)
--
	/** @typedef {import('d3-sankey').SankeyGraph} SankeyGraph */

./layercake/src/_components/Sankey.svelte:22:16
Error: Generic type 'SankeyNodeMinimal<N, L>' requires 2 type argument(s). (js)

	/** @typedef {import('d3-sankey').SankeyNodeMinimal} SankeyNodeMinimal */

./layercake/src/_components/Sankey.svelte:24:16
Error: Generic type 'SankeyLinkMinimal<N, L>' requires 2 type argument(s). (js)

	/** @typedef {import('d3-sankey').SankeyLinkMinimal} SankeyLink */

./layercake/src/_components/Sankey.svelte:38:17
Error: Parameter has a name but no type. Did you mean 'arg0: SankeyNodeMinimal'? (js)
	 * @property {LinkSortFunction|undefined} [linkSort] - How to sort the links, passed to [`sankey.linkSort`](https://github.com/d3/d3-sankey#sankey_linkSort).
	 * @property {(SankeyNodeMinimal) => number | string} [nodeId=(d) => d.id] - The ID field accessor, passed to [`sankey.nodeId`](https://github.com/d3/d3-sankey#sankey_nodeId).
	 * @property {SankeyAlignment} [nodeAlign=Sankey.sankeyLeft] - An alignment function to position the Sankey blocks. See the [d3-sankey documentation](https://github.com/d3/d3-sankey#alignments) for more.

./layercake/src/_components/Sankey.svelte:65:14
Error: Argument of type 'LinkSortFunction | undefined' is not assignable to parameter of type '((a: SankeyLinkMinimal<{}, {}>, b: SankeyLinkMinimal<{}, {}>) => number) | null | undefined'.
  Type 'LinkSortFunction' is not assignable to type '(a: SankeyLinkMinimal<{}, {}>, b: SankeyLinkMinimal<{}, {}>) => number'.

rgieseke added 3 commits July 17, 2026 12:39
They are used in type imports and not found from d3 types.
@github-actions

Copy link
Copy Markdown
Contributor

🎭 Playwright tests failed

The Playwright tests failed on this PR. Please check the test results and fix any issues.

📊 View full test report

@mhkeller
mhkeller merged commit 3274644 into mhkeller:main Jul 17, 2026
5 checks passed
@mhkeller

Copy link
Copy Markdown
Owner

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants