Я пытаюсь использовать «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, но я хочу знать, что я здесь делаю неправильно.
Для тех, кто задается вопросом, что не так, я на самом деле обнаружил, что с конфигурацией моего проекта все в порядке, но эта проблема возникла из-за неправильной настройки модуля зависимостей weaviate-ts-client
.
По-видимому, с конфигурацией module/moduleResolution Node16/NodeNext происходит много хаоса, так как его алгоритм разрешения устарел во многих прошлых конфигурациях для проектов, и теперь требуется множество пакетов для обновления их конфигурации в соответствии с его новым поведением. , и это вызывает много проблем во многих местах.
Вы можете проверить, имеет ли зависимость, которую вы пытаетесь использовать, неправильно настроенные параметры машинописного текста здесь arethetypeswrong
Вот несколько ссылок, которые могут помочь вам справиться с этой проблемой. https://github.com/microsoft/TypeScript/issues/49160