использование привязок типов библиотеки JSTS для TypeScript

#typescript #jts

#typescript #jts

Вопрос:

Недавно я столкнулся с трудностями при использовании библиотеки JSTS и ее привязок типов для Typescript, и хотя в конце концов я заставил это работать, я не совсем понимаю, почему.

Я начал с установки JSTS и его привязок:

 npm i --S jsts
npm i --D @types/jsts
 

Изначально я попробовал следующее в своем коде:

 import jsts from 'jsts';
const {OL3Parser} = jsts.io;
const parser = new OL3Parser();
 

Указанный выше тип -проверен без ошибок, но произошел сбой во время выполнения с помощью: Uncaught TypeError: Cannot read property 'io' of undefined .

Кроме того, если бы я попытался ввести parser переменную в приведенном выше примере следующим образом:

 const parser: OL3Parser = new OL3Parser();
 

… тогда я бы получил:

 TS2749: 'OL3Parser' refers to a value, but is being used as a type here. Did you mean 'typeof OL3Parser'?
 

Затем я попытался:

 import OL3Parser from 'jsts/org/locationtech/jts/io/OL3Parser'; 
 

Это сбой проверки типов с:

 TS7016: Could not find a declaration file for module 'jsts/org/locationtech/jts/io/OL3Parser'.
 

После некоторых онлайн-исследований я получил:

 const jsts = require('jsts');
const parser: jsts.io.OL3Parser = new jsts.io.OL3Parser();
 

Вышеупомянутые проверки типов и работы по назначению, но мне не нравятся длинные полные имена, и я не понимаю, почему я должен использовать библиотеку именно таким образом.

Есть идеи?

Ответ №1:

Вам необходимо выполнить импорт jsts следующим образом:

 import * as jsts from 'jsts';
 

Причина этого в том, что jsts это скорее экспортирует объект пространства имен вместо именованного экспорта или экспорта по умолчанию.

Таким образом, использование вышеуказанного подхода импортирует полное пространство имен модуля в одну переменную, что обеспечивает дополнительный доступ к различным jsts классам.

Например:

 const reader = new jsts.io.GeoJSONReader();
 

Комментарии:

1. Похоже, в моем случае это не работает. require Для меня работает только подход, о котором я упоминал в своем первоначальном вопросе.

2. Вы создаете свой исходный код с помощью такого инструмента, как Typescript или Babel? Можете ли вы показать свою конфигурацию?