Почему я не могу импортировать классы и перечисления из пространства имен?

Я использую Typescript с pg-promise и не совсем понимаю, почему я не могу импортировать различные классы и перечисления, как обычно. Обычно, когда я использую библиотеку, я импортирую тип, использую его, и он отлично работает. В приведенном ниже коде я пытаюсь создать «режим», который будет использоваться в моих транзакциях, поэтому я импортирую TransactionMode и isolationLevel, но на самом деле они не определены во время выполнения (нет ошибок во время разработки и во время компиляции). esModuleInterop есть true в моем tsconfig.json.

import pgPromise, { isolationLevel, TransactionMode } from "pg-promise";

const pgp = pgPromise();

// Doing this works, but I don't understand why it's necessary.
// const { TransactionMode, isolationLevel } = pgp.txMode;

// Here the imported TransactionMode and isolationLevel are undefined
const mode = new TransactionMode({ tiLevel: isolationLevel.serializable });

(...)

для использования в моем коде, вместо того, чтобы вытащить имя

Вы получили свой ответ, плюс посмотрите обновление там. Пожалуйста, примите, если на этом проблема будет решена.

vitaly-t 16.11.2022 01:36

@vitaly-t Я не получил ответа, к тому же ответ, который вы дали, уже был изложен в моем вопросе. Я спрашивал, «почему» мне пришлось импортировать isolationLevel и TransactionMode из пространства имен вместо того, чтобы использовать стандартный механизм import, а затем использовать импортированные элементы. Вы сказали, что это потому, что ваша библиотека написана на JS, но я использовал много JS-библиотек с объявлениями типов TS, и я могу просто использовать импортированные объекты. Я не говорю, что вы сделали что-то не так, просто ищите причину.

sw1337 16.11.2022 03:12

Оригинальная библиотека реализует внутреннее пространство имен txMode {isolationLevel, TransactionMode}. TypeScript не может обойти пространства имен JavaScript, вы должны использовать комбинацию, при которой вы импортируете содержащее пространство имен, а затем извлекаете его свойства. Другого пути нет.

vitaly-t 16.11.2022 03:16
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
3
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • Чтобы импортировать самостоятельно:
import {txMode} from 'pg-promise';

const {TransactionMode, isolationLevel} = txMode;
  • Для импорта из корневого интерфейса:
import * as pgPromise from 'pg-promise';

const {TransactionMode, isolationLevel} = pgPromise.txMode;

почему я не могу импортировать различные классы и перечисления, как обычно?

Поскольку pg-promise — это библиотека JavaScript с некоторыми объявлениями TypeScript поверх нее, это не собственный модуль TypeScript. На самом деле он был написан так давно, что никакого TypeScript тогда не существовало.

P.S. Я автор pg-promise.

ОБНОВИТЬ

После этого была обновлена ​​txMode декларация , которая теперь позволяет избежать исходной проблемы.

Спасибо за ответ. Если вы не возражаете, я спрошу (я изучаю JS/TS), есть ли способ для библиотеки JS объявить типы TS таким образом, чтобы они соответствовали внутренней структуре библиотеки? Другими словами, импорт объекта или типа означает, что я могу использовать его «как есть». Я использовал много библиотек JS с типами TS и никогда раньше не сталкивался с этой проблемой. Что отличает pg-promise в этом отношении?

sw1337 11.11.2022 17:51

Смотрите ОБНОВЛЕНИЕ в моем ответе.

vitaly-t 16.11.2022 01:37

Другие вопросы по теме