diff --git a/packages/turf-helpers/index.ts b/packages/turf-helpers/index.ts index b4fc01ee5..c6c354754 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 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, };