From 248f3a82113964c11d8eda182a8e1256c90a5600 Mon Sep 17 00:00:00 2001 From: Matthew Fedderly <24275386+mfedderly@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:31:51 -0500 Subject: [PATCH 1/2] Improve type inference in @turf/helpers' geometry and geometryCollection functions --- packages/turf-helpers/index.ts | 42 ++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/packages/turf-helpers/index.ts b/packages/turf-helpers/index.ts index b4fc01ee57..426b18f57a 100644 --- a/packages/turf-helpers/index.ts +++ b/packages/turf-helpers/index.ts @@ -207,30 +207,39 @@ export function feature< * var geometry = turf.geometry(type, coordinates); * // => geometry */ -export function geometry( - type: +export function geometry< + T extends | "Point" | "LineString" | "Polygon" | "MultiPoint" | "MultiLineString" | "MultiPolygon", +>( + type: T, coordinates: any[], _options: Record = {} -) { +): { + Point: Point; + LineString: LineString; + Polygon: Polygon; + MultiPoint: MultiPoint; + MultiLineString: MultiLineString; + MultiPolygon: MultiPolygon; +}[T] { switch (type) { case "Point": - return point(coordinates).geometry; + return point(coordinates).geometry as any; case "LineString": - return lineString(coordinates).geometry; + return lineString(coordinates).geometry satisfies LineString as any; case "Polygon": - return polygon(coordinates).geometry; + return polygon(coordinates).geometry as any; case "MultiPoint": - return multiPoint(coordinates).geometry; + return multiPoint(coordinates).geometry as any; case "MultiLineString": - return multiLineString(coordinates).geometry; + return multiLineString(coordinates).geometry as any; case "MultiPolygon": - return multiPolygon(coordinates).geometry; + return multiPolygon(coordinates).geometry as any; default: throw new Error(type + " is invalid"); } @@ -598,15 +607,20 @@ export function multiPolygon

( * // => collection */ export function geometryCollection< + G extends + | Point + | LineString + | Polygon + | MultiPoint + | MultiLineString + | MultiPolygon, P extends GeoJsonProperties = GeoJsonProperties, >( - geometries: Array< - Point | LineString | Polygon | MultiPoint | MultiLineString | MultiPolygon - >, + geometries: Array, properties?: P, options: { bbox?: BBox; id?: Id } = {} -): Feature { - const geom: GeometryCollection = { +): Feature, P> { + const geom: GeometryCollection = { type: "GeometryCollection", geometries, }; From 511d9436cd858ac12e7a003a119b8a98e603a59b Mon Sep 17 00:00:00 2001 From: Matthew Fedderly <24275386+mfedderly@users.noreply.github.com> Date: Tue, 16 Dec 2025 07:55:47 -0500 Subject: [PATCH 2/2] Remove wayward satisfies use --- packages/turf-helpers/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/turf-helpers/index.ts b/packages/turf-helpers/index.ts index 426b18f57a..c6c3547549 100644 --- a/packages/turf-helpers/index.ts +++ b/packages/turf-helpers/index.ts @@ -231,7 +231,7 @@ export function geometry< case "Point": return point(coordinates).geometry as any; case "LineString": - return lineString(coordinates).geometry satisfies LineString as any; + return lineString(coordinates).geometry as any; case "Polygon": return polygon(coordinates).geometry as any; case "MultiPoint":