Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Document JSDoc imports with generics #1106

Open

Description

@gregtatum

The JSDoc types do not include an example of importing a type with a generic.

e.g. this is the correct way:

/**
 * @template T
 * @typedef {import("../types").ThunkAction<T>} ThunkAction<T>
 *

I won't enumerate the wrong ways I tried :D

It took me a good hour to figure it out, with lots of searching. I could not find any examples anywhere in the docs, nor in Stack Overflow. I figured someone else could benefit from my confusion.

Activity

  1. andrewrlee commented on Oct 19, 2019

    @andrewrlee

    Thank-you, this helped me loads after a lot of searching.

    I'm new to JSDoc and using vscode. Another gotcha for me was that this restricts typeDef other types in the same jsdoc as a template variable:

    The following makes Bob generic too:

    /**
     * @template T
     * @typedef {import("../types").ThunkAction<T>} ThunkAction<T>
     * @typedef {import("../types").Bob} Bob
     */
    

    The following makes Bob generic and also adds a Cannot find name 'T' error:

    /**
     * @typedef {import("../types").Bob} Bob
     * @template T
     * @typedef {import("../types").ThunkAction<T>} ThunkAction<T>
     */
    

    It also seems like the second param on the type def is optional, as the following also works for me:

    /**
     * @template T
     * @typedef {import("../types").ThunkAction<T>} ThunkAction
     */
    

    I assume these aren't defects, but I found this quite confusing and additional documentation might help?

  2. gregtatum commented on Oct 24, 2019

    @gregtatum
    Author

    Thanks for clarifying some of those points Andrew Lee (@andrewrlee), I ran into some of those issues as well.

  3. codingedgar commented on Dec 13, 2019

    @codingedgar

    Greg Tatum (@gregtatum) wow thank you so much!! 👏👏 👏

  4. tjx666 commented on Feb 13, 2020

    @tjx666

    I want to know how to keep the generic when useing typedef to import:
    screenshot_2020-02-13_17-08-58

  5. sultan99 commented on Jun 6, 2020

    @sultan99

    YuTengjing (@tjx666)

    /** line 3
     * @template T
     * @typedef {import('./node').Node<T>} Node
     */
    
    . . . 
      / **                                      // line 15 
        * @template T
        * @type {Node<T> | undefined}
        */
      this.head = undefined                     // line 16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions