Я пытаюсь создать объявление окружающего типа для Turf.js. Его можно импортировать из npm либо со всеми функциями, либо по частям, по одному модулю.
У меня есть основное пространство имен, которое содержит все объявления функций:
declare namespace turf {
export function area(input: GeoJSON.Feature<any> | GeoJSON.FeatureCollection<any>): number;
export function bearing(start: GeoJSON.Feature<GeoJSON.Point>, end: GeoJSON.Feature<GeoJSON.Point>): number;
...
export function feature(geometry: GeoJSON.GeometryObject, properties?: any): GeoJSON.FeatureCollection<any>;
export function point(coordinates: GeoJSON.Position, properties?: any): GeoJSON.Feature<GeoJSON.Point>;
}
Для монолитного экспорта я могу сделать это:
declare module "turf" {
export = turf;
}
А для нормального поэтапного экспорта модулей я могу сделать так:
declare module "@turf/area" {
export default turf.area;
}
declare module "@turf/bearing" {
export default turf.bearing;
}
Который затем можно использовать следующим образом:
import bearing from "@turf/bearing";
В библиотеке turf также есть модуль @turf/helpers
, который используется следующим образом:
import { feature, point } from "@turf/helpers"
Мой вопрос: как мне ввести экспорт модуля «@turf/helpers»? Я не хочу копировать определение типа, а использую те, которые уже есть в пространстве имен turf.
Самое близкое, что мне удалось достичь, это:
declare module "@turf/helpers" {
export = {
feature: turf.feature,
point: turf.point,
}
}
Но так как я не экспортирую модуль, я должен использовать формат import x = require(...)
в своей реализации:
import helpers = require("@turf/helpers");
const { feature, point } = helpers;
feature(...)