Импорт машинописного текста по умолчанию из установленного модуля работает неправильно

Я пытаюсь использовать «weaviate-ts-client» из своего проекта, и в моей конфигурации машинописного текста что-то не так, но я не могу его найти.

Я импортирую экспорт по умолчанию из библиотеки, как это

import weaviate from 'weaviate-ts-client';

weaviate.client(...) // gives me an ts error, Property 'client' does not exist on type 'typeof import

так как это ошибка, ТС предлагает мне сделать это

import weaviate from 'weaviate-ts-client';

weaviate.default.client(...)

Если я сделаю выше, ошибка компиляции ts устранена, но во время выполнения она не работает и выдает мне ошибку TypeError: Не удается прочитать свойства неопределенного (чтение «клиент»)

Фактически, weaviate фактически импортирует экспорт по умолчанию, объявленный из index.d.ts.

declare const app: {
    client: (params: ConnectionParams) => WeaviateClient;
    ApiKey: typeof ApiKey;
    AuthUserPasswordCredentials: typeof AuthUserPasswordCredentials;
    AuthAccessTokenCredentials: typeof AuthAccessTokenCredentials;
    AuthClientCredentials: typeof AuthClientCredentials;
    EmbeddedOptions: typeof EmbeddedOptions;
};
export default app;

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

import weaviate from 'weaviate-ts-client';

console.info(weaviate);


// {
//   client: [Function: client],
//   ApiKey: [class Ci],
//   AuthUserPasswordCredentials: [class Kt],
//   AuthAccessTokenCredentials: [class Xe],
//   AuthClientCredentials: [class Zt],
//   EmbeddedOptions: [class ts]
// }


// But tsc still complains about this line! what??

weaviate.client(...) // Property 'client' does not exist on type 'typeof import

Я предполагаю, что что-то не так с моим tsconfig.json, и это выглядит так

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "Node16",
    "lib": ["ES2022", "DOM"],
    "moduleResolution": "node16",
    "rootDir": ".",
    "outDir": "build",
    "importHelpers": true,
    "alwaysStrict": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "sourceMap": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "noImplicitReturns": true,
    "noUnusedLocals": false,
    "noUnusedParameters": false,
    "noImplicitAny": false,
    "noImplicitThis": false,
    "strictNullChecks": false
  },
  "include": ["src/**/*", "__tests__/**/*"],
  "ts-node": {
    "esm": true
  }
}

Странно то, что эта проблема возникает только тогда, когда я пытаюсь импортировать по умолчанию из установленных пакетов в node_modules. Весь импорт по умолчанию из моих собственных модулей внутри src/* работает нормально, как и ожидалось.

Я попытался изменить moduleResolution на node с node-16. при этом ошибка компиляции ts устраняется, но вместо этого выдается ошибка времени выполнения ReferenceError: exports is not defined in ES module scope.

Я также пытался добавить или удалить esModuleInterop или allowSyntheticDefaultImports, но ничего не получилось.

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

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой 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 для повышения производительности приложения путем загрузки модулей только тогда, когда они...
1
0
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для тех, кто задается вопросом, что не так, я на самом деле обнаружил, что с конфигурацией моего проекта все в порядке, но эта проблема возникла из-за неправильной настройки модуля зависимостей weaviate-ts-client.

По-видимому, с конфигурацией module/moduleResolution Node16/NodeNext происходит много хаоса, так как его алгоритм разрешения устарел во многих прошлых конфигурациях для проектов, и теперь требуется множество пакетов для обновления их конфигурации в соответствии с его новым поведением. , и это вызывает много проблем во многих местах.

Вы можете проверить, имеет ли зависимость, которую вы пытаетесь использовать, неправильно настроенные параметры машинописного текста здесь arethetypeswrong

Вот несколько ссылок, которые могут помочь вам справиться с этой проблемой. https://github.com/microsoft/TypeScript/issues/49160

https://github.com/microsoft/TypeScript/issues/53759

https://github.com/vitejs/vite-plugin-react/issues/104

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