microsoft / microsoft/TypeScript

JavaScript Intellisense doesn't detect types of properties defined in async constructors

Aperta
#61,137 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Domain: JavaScript Help Wanted Possible Improvement
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

JavaScript Intellisense doesn't detect types of properties defined in async constructors

Summary

A popular asynchronous constructor pattern in JavaScript is using an async IIFE in the constructor which returns this at the end. E.g.

constructor() {
	return (async () => {
		this.#x = 42;
		this.y = 42;

		return this;
	})();
}

However, VSCode Intellisense does not infer the types for properties defined in such a constructor.

Steps to reproduce

  1. Open a blank JavaScript, and paste in the following code:
class Class1 {
	#x;
	y;
	constructor() {
		this.#x = 42;
		this.y = 42;
	}
}
class Class2 {
	#x;
	y;
	constructor() {
		return (async () => {
			this.#x = 42;
			this.y = 42;

			return this;
		})();
	}
}
  1. Hover over y in Class1 and observe the tooltip: (property) Class1.y: number
  2. Hover over y in Class2 and observe the tooltip: (property) Class2.y: any

Does this issue occur when all extensions are disabled?: Yes

  • VS Code Version: 1.97.0
  • OS Version: Windows 11

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il problema in VS Code con gli esempi forniti di Class1 e Class2 e confronta i tipi mostrati al passaggio del mouse con le estensioni disabilitate. Traccia la gestione di JavaScript IntelliSense per i costruttori asincroni nel servizio del linguaggio TypeScript, quindi aggiungi una copertura di regressione; il lavoro è completato quando Class2.y viene inferito come number, come Class1.y.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, typescript, vscode
Ambito
developer-experience, tooling
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
42/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.