Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unexpected "'Type' is declared but its value is never read." error with jsdoc @import syntax #60908

Open
DavidBruant opened this issue Jan 2, 2025 · 2 comments Β· May be fixed by #60921
Open

Unexpected "'Type' is declared but its value is never read." error with jsdoc @import syntax #60908

DavidBruant opened this issue Jan 2, 2025 · 2 comments Β· May be fixed by #60921
Labels
Bug A bug in TypeScript Fix Available A PR has been opened for this issue Help Wanted You can do this
Milestone

Comments

@DavidBruant
Copy link

DavidBruant commented Jan 2, 2025

πŸ”Ž Search Terms

jsdoc @import "is declared but its value is never read"

πŸ•— Version & Regression Information

I have seen this error since the introduction of @import in jsdoc comments (TS 5.5 if i recall correctly)

⏯ Playground Link

No response

πŸ’» Code

I made a testcase repo https://github.com/DavidBruant/jsdoc-import-unused-testcase
It is as reduced as a managed to make it

The code :

/** @import {ImportedType} from './types.d.ts' */

function id() { return undefined }

/** @type {Set<ImportedType>} */
export const phases = new Set(['a', 'b'])

The types.d.ts file:

export type ImportedType = 'a' | 'b'

πŸ™ Actual behavior

tsc and VSCodium both say:

code.js:1:5 - error TS6133: 'ImportedType' is declared but its value is never read.

1 /** @import {ImportedType} from './types.d.ts' */

πŸ™‚ Expected behavior

There shouldn't be an error because of the line using the type : /** @type {Set<ImportedType>} */

We've had this error in plently of places. It also seems like it occurs more regulary when the type is used within a generics

Additional information about the issue

For some reason, removing function id() { return undefined } from the code solves the problem while it seems completely unrelated to the problem

@Andarist
Copy link
Contributor

Andarist commented Jan 3, 2025

Interestingly, I can't repro it using the bug workbench: workbench

@regseb
Copy link

regseb commented Jan 11, 2025

I think I have the same problem.

  • TypeScript reports that an import is useless when used in the return type of a function. bad.js πŸ‘Ž
  • But it doesn't report a problem if it's used in the return type of two functions. good1.js πŸ‘
  • Or if used in the type of a variable good2.js πŸ‘

  • package.json

    {
      "name": "testcase",
      "version": "1.0.0",
      "type": "module",
      "dependencies": {
        "@types/node": "22.10.5",
        "playwright": "1.49.1",
        "typescript": "5.7.3"
      }
    }
  • tsconfig.json

    {
      "compilerOptions": {
        "module": "nodenext",
        "noUnusedLocals": true,
        "noEmit": true,
        "checkJs": true
      }
    }
  • bad.js

    /**
     * @import { Page } from "playwright"
     */
    
    /**
     * @returns {Page|undefined}
     */
    function foo() {
        return undefined;
    }
    
    console.log(foo());
  • good1.js

    /**
     * @import { Page } from "playwright"
     */
    
    /**
     * @returns {Page|undefined}
     */
    function foo() {
        return undefined;
    }
    
    /**
     * @returns {Page|undefined}
     */
    function bar() {
        return undefined;
    }
    
    console.log(foo(), bar());
  • good2.js

    /**
     * @import { Page } from "playwright"
     */
    
    /**
     * @type {Page|undefined}
     */
    let foo;
    
    console.log(foo);
  1. npm install
  2. npx tsc
    bad.js:2:4 - error TS6133: 'Page' is declared but its value is never read.
    
    2  * @import { Page } from "playwright"
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    
    Found 1 error in bad.js:2
    

@typescript-bot typescript-bot added the Fix Available A PR has been opened for this issue label Jan 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug A bug in TypeScript Fix Available A PR has been opened for this issue Help Wanted You can do this
Projects
None yet
5 participants