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

Document JSDoc imports with generics #1106

Open
gregtatum opened this issue Sep 13, 2019 · 5 comments
Open

Document JSDoc imports with generics #1106

gregtatum opened this issue Sep 13, 2019 · 5 comments

Comments

@gregtatum
Copy link

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.

@andrewrlee
Copy link

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?

@gregtatum
Copy link
Author

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

@codingedgar
Copy link

@gregtatum wow thank you so much!! 👏👏 👏

@tjx666
Copy link

tjx666 commented Feb 13, 2020

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

@sultan99
Copy link

sultan99 commented Jun 6, 2020

@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 subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants