typescript - UI-pakke i Turborepo producerer TS-fejl intermitterende - Kunne ikke finde en deklarationsfil for modulet
Jeg prøver lige nu en Turborepo af, og jeg har problemer med en TS-fejl, jeg tilsyneladende ikke kan løse.
Fejlmeddelelsen lyder:
Kunne ikke finde en deklarationsfil for modulet '@myapp/ui'. 'C:/myapp/packages/ui/dist/index.mjs' har implicit typen 'any'.
Prøv
npm i --save-dev @types/myapp__ui, hvis det findes, eller tilføj en ny deklarationsfil (.d.ts) indeholdendedeclare module '@myapp/ui';
Mit hovedproblem er, at dette er intermitterende. Nogle gange er fejlen der, og andre gange forsvinder den bare, når TS Serveren genstartes, og så bliver den væk i flere timer.
Her er min projektstruktur:
.
├── apps
│ └── web
│ ├── src
│ │ └── [lang]
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── package.json
│ └── tsconfig.json
├── packages
│ └── ui
│ ├── dist
│ ├── src
│ ├── package.json
│ ├── tsup.config.ts
│ └── tsconfig.json
├── package.json
└── turbo.json
Indholdet af mine packages/ui/package.json:
{
"name": "@myapp/ui",
"version": "0.0.0",
"sideEffects": false,
"main": "./dist/index",
"types": "./dist/index.d.mts",
"exports": {
".": {
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
}
}
},
"scripts": {
"build": "tsup --format esm --minify",
"dev": "tsup --format esm --minify --watch",
"check-types": "tsx --noEmit",
"lint": "eslint src/ --max-warnings 0",
"ui:add": "pnpm dlx shadcn-ui@latest add"
},
"peerDependencies": {
"next": "^14.1.1",
"react": "^18.2.0"
},
"devDependencies": {
"@myapp/eslint-config": "workspace:*",
"@myapp/tailwind-config": "workspace:*",
"@myapp/typescript-config": "workspace:*",
"autoprefixer": "^10.4.16",
"eslint": "^8.57.0",
"postcss": "^8.4.38",
"tailwindcss": "^3.4.3",
"tsup": "^8.0.2",
"typescript": "^5.3.3"
}
}
Jeg har prøvet at ændre "types" til "dist/index", hvilket virker midlertidigt, og så kommer fejlen tilbage, og så omvendt, hvis jeg ændrer det til "dist/index.d.mts".
Den korrekte index.d.mts er faktisk i dist-mappen, og alt ser ud til at være korrekt deri.
Her er min tsup.config.ts:
import { defineConfig, Options } from "tsup"
export default defineConfig((options: Options) => ({
entry: ["src/**/*.tsx"],
format: ["esm"],
esbuildOptions(options) {
options.banner = {
js: '"use client"',
}
},
dts: true,
clean: true, // Clears the dist
external: ["react", "next-intl"],
...options,
}))