Microsoft/TypeScript
Vedi su GitHubJSDoc recursive inference not working properly on generic array wrapping
Open
#60.988 aperta il 17 gen 2025
Domain: JSDocHelp WantedPossible Improvement
Metriche repository
- Star
- (48.455 star)
- Metriche merge PR
- (Merge medio 6g 17h) (9 PR mergiate in 30 g)
Descrizione
🔎 Search Terms
"jsdoc", "recursive", "inference", "generic"
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about everything.
⏯ Playground Link
💻 Code
JS with JSDoc typing:
/**
* @template [T = any]
*/
class S {
/**
* @type {Set<T>}
*/
set;
/**
* @param {Set<T>} set
*/
constructor(set) {
this.set = set;
}
array() {
return new S(new Set([...this.set].map(item => [item]))); // returns S<T[][]> but expected S<T[]> !!!
}
}
/**
* @template [T = any]
* @param {Set<T>} set
*/
function sArray(set) {
return new S(new Set([...set].map(item => [item]))); // returns S<T[]> as expected
};
TS version:
class S<T> {
set: Set<T>;
constructor(set: Set<T>) {
this.set = set;
}
array() {
return new S(new Set([...this.set].map(item => [item]))); // returns S<T[]> as expected
}
}
function sArray<T>(set: Set<T>) {
return new S(new Set([...set].map(item => [item]))); // returns S<T[]> as expected
};
🙁 Actual behavior
In JSDoc types when a class with generic type T has a method that returns an instance of the same class but with the generic T[] it's return type will be inferred as T[][]. The same code written in plain TS will return the expected result.
🙂 Expected behavior
It's expected that the JSDoc version of the code has the same output as the TS version for the method that returns an instance of the class with generic wrapped in T[].
Additional information about the issue
No response