-
-
Notifications
You must be signed in to change notification settings - Fork 169
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"]
}