declare module 'd3-octree' { export interface OctreeLeaf { data: T; next?: OctreeLeaf; length?: undefined; } export interface OctreeInternalNode extends Array | OctreeLeaf | undefined> { length: 8; } export type OctreeNode = OctreeInternalNode | OctreeLeaf; export interface Octree { x(): (d: T) => number; x(x: (d: T) => number): this; y(): (d: T) => number; y(y: (d: T) => number): this; z(): (d: T) => number; z(z: (d: T) => number): this; extent(): [[number, number, number], [number, number, number]] | undefined; extent(extent: [[number, number, number], [number, number, number]]): this; cover(x: number, y: number, z: number): this; add(datum: T): this; addAll(data: T[]): this; remove(datum: T): this; removeAll(data: T[]): this; copy(): Octree; root(): OctreeNode | undefined; data(): T[]; size(): number; find(x: number, y: number, z: number, radius?: number): T | undefined; findAllWithinRadius(x: number, y: number, z: number, radius: number): T[]; visit( callback: ( node: OctreeNode, x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, ) => void | boolean, ): this; visitAfter( callback: ( node: OctreeNode, x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, ) => void, ): this; } export function octree( data?: T[], x?: (d: T) => number, y?: (d: T) => number, z?: (d: T) => number, ): Octree; }