Microsoft/TypeScript
在 GitHub 查看JSDoc recursive inference not working properly on generic array wrapping
Open
#60,988 建立於 2025年1月17日
Domain: JSDocHelp WantedPossible Improvement
倉庫指標
- Star
- (48,455 star)
- PR 合併指標
- (平均合併 6天 17小時) (30 天內合併 9 個 PR)
描述
🔎 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