-
- Notifications
You must be signed in to change notification settings - Fork 168
Description
Expected behavior
In previous version 52.0.4, eslint-plugin-jsdoc exported complete TypeScript type definitions for the plugin, including ConfigGroups, ConfigVariants, ErrorLevelVariants, and a strongly-typed configs object.
Importing the plugin provided accurate type information instead of falling back to any.
Example from v52.0.4:
// index.d.ts export type ConfigGroups = "recommended" | "stylistic" | "contents" | "logical" | "requirements"; export type ConfigVariants = "" | "-typescript" | "-typescript-flavor"; export type ErrorLevelVariants = "" | "-error"; /** * @type {import('eslint').ESLint.Plugin & { * configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, import('eslint').Linter.Config> * }} */ declare const index: import("eslint").ESLint.Plugin & { configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`, import("eslint").Linter.Config>; }; export default index;This allowed full IntelliSense and type safety.
Actual behavior
In v53+, the type definitions were reduced to:
// index.d.ts import plugin_default from "./plugin.js"; export { plugin_default as default };This removes the ConfigGroups, ConfigVariants, ErrorLevelVariants, and configs typings, causing the plugin to be imported as any, breaking type safety and editor IntelliSense.
Reproducible example
import jsdoc from "eslint-plugin-jsdoc"; jsdoc.nonExistentProperty; // no TS error but should produce an error as for v52.0.4You should see an error such as:
Property 'nonExistentProperty' does not exist on type 'Plugin & { configs: Record<"flat/recommended" | "flat/recommended-error" | "flat/recommended-typescript" | "flat/recommended-typescript-error" | "flat/recommended-typescript-flavor" | ... 24 more ... | "flat/requirements-typescript-flavor-error", Config<...>>; }'.ts(2339)
tsconfig if need it:
{ "compilerOptions": { "target": "ESNext", "module": "Preserve", "composite": false, "skipLibCheck": true, "moduleResolution": "Bundler", "isolatedModules": true, "inlineSources": false, "esModuleInterop": true, "declarationMap": true, "noEmit": true, "allowImportingTsExtensions": true, "strict": true, "strictNullChecks": true, "noUnusedLocals": false, "noUnusedParameters": false, "forceConsistentCasingInFileNames": true, "declaration": true, "preserveWatchOutput": true }, "exclude": ["node_modules"] }