microsoft / microsoft/TypeScript
JSDOC generics bug for callbacks when args are present
Nessuno ha ancora preso questa issue.
- Lingua principale
- Go
- Stelle
- 111k
- Fork
- 14.3k
- Merge medio
- 2g 4h
- PR unite (30g)
- 132
Descrizione
### 🔎 Search Terms
"Generics", "JSDOC", "Callback"
### 🕗 Version & Regression Information
TS 5.7.3
v5.8.0-dev.20250131
### ⏯ Playground Link
https://www.typescriptlang.org/play/?filetype=js#code/PQKgUGBSDKAiDyBhABAcwKYDt0CcCWAxgM7IBGArqsgGYD2OyBAhgDYulMEDWJA7gBZZkTHKhIj0yAA450RLABcIASUzIFgmrTa1eeTFXQAPJgFspLdABpkAAwAm6avvQAKAJS3kRfrXIt7ZFkFchw1WwA1RAAeaAA+WxsKBWQBIRFUMFtmNg5uL34mcVESPBT7WjlkTFoU2SJtADdJW2gvJkxA4NDMEkiYjoBPBIA6CBBgCFBwZBBkAAEFdHMWJiXkaDBZhakRM2QAb1cMgAYALkPkWlJ5HGacC4BReGQAX3dkAF44jdfGVnYnC4yC2c3muxw+wO8CkCjwtF6fwA2rRYfDegBdEHbebdMIkA5RWJxV6gyagUELBSDKSSA7IYmuaiYC7HUTnS7XW73J7wADcbw+3w2NlRcIRRAA-BcYeLekKfkT4m8yWBqORMAQ5chHM5sK4coDuKK0RKPgctsgrQQJSl6ZgzJI-p8rqbeshJZLDqSrdbbVcbrh7l9quheMhnh5LX7eikiAo1pIXYa8lxXPSuUHcILo0F0CEwqHw1FXPHE+4wKSwNNKYtlhZExtVQRVkQSFFDrnplSaXToH8Jrmy0suyAZr6cRCof3vAn1rnZpMJzbYzhyFr6KW5+hzQvfRo8EQRsOk7PE7nSVXu4te7rDvbHdLZ-gDG8-rL0SRB2AW0USM9vSmYBkAAQVEOwUyBLw9A0YQSmQABaZAYAQFAKjkTAAHI6jkJpJGgMZgGAlCkGXf1GgARguIkhjiatgIAFWgCdfRXeNkEo6iYlIWhtHQDo6LYlJKJDXUXFcNlUBOBV1DXaxLgdUx0AuTDdSYfwFEwnN6NA8DsgBVNoLKXxyBSDISCQki0MqEh6jwjZCOIuBSNY8iACYuOiHi+IEnSmJYmN2MaDzkCJbzLF8oSOLc0SnHEjwvh+BQ5JsB8lJUtSNK094wCAA
### 💻 Code
In the following example, `define()` should return `VC`, but when arg `callback` has args it does not resolve `S` and returns `VC`.
```js
/**
* @template S
* @param {(arg0: { observer: EO }) => S} callback
* @param {Options} [options]
* @returns {VC}
*/
/*
* @type { (fn: (arg0: { observer: EO; }) => S, options?: Options) => VC }
*/
function define(callback, options) {
const { name } = options ?? {}
const observer = new EO()
const state = callback({ observer })
return new VC(state)
}
/**
* @template S
*/
class VC {
/** @type {S} */
state
/**
* @param {S} state
*/
constructor(state) {
this.state = state
}
}
/** @typedef {{ name?: string }} Options */
class EO {}
// Arg `callback` with args - JSDOC doesn't resolve S.
// JSDOC const v1: VC
// TS const v1: VC
const v1 = define((arg0) => true, { name: 'default' })
// Arg `callback` without args - JSDOC does resolve S.
// JSDOC const v2: VC
// TS const v2: VC
const v2 = define(() => true, { name: 'default' })
```
### 🙁 Actual behavior
JSDOC doesn't resolve S
### 🙂 Expected behavior
JSDOC should resolve S in the same way as TS.
### Additional information about the issue
_No response_
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con il repro collegato in TypeScript Playground e confronta i tipi dedotti di v1 e v2 con i risultati TypeScript attesi. Traccia quindi il percorso di inferenza delle callback generiche JSDoc nel compilatore, poi aggiungi un test di regressione che dimostri che v1 viene dedotto come VC quando la callback ha un argomento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- javascript, typescript
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100