microsoft / microsoft/TypeScript
New operator should return object returned by constructor
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
new, operator, constructor, return, object
Suggestion
in javascript, calling with the operator new a function that returns an object does not resolves to the created instance but to the object returned by the function
Typescript should do the same.
That could offer a better compliance with the ECMAScript standard.
Use Cases
This can for example allow to create async constructor (see examples)
Examples
function foo(returnDate = false) {
this.bar = 1;
if(returnDate) return new Date()
}
const obj1 = new foo() // ES resolves to a foo instance ; typescript get error "ts(2350)"
const obj2 = new foo(true) // ES resolves to a Date ; typescript get error "ts(2350)"
obj1 instanceof foo // true
obj2 instanceof foo // false
// obj1 and obj2 type should be foo | Date
Use case example: async constructor:
class Foo {
constructor() {
return Promise.resolve().then(() => this);
}
}
const foo1 = await new Foo();
const foo2 = new Foo(); // foo2 is Promise<Foo> ; ts consider foo2 as Foo
Checklist
My suggestion meets these guidelines:
- This wouldn't be a breaking change in existing TypeScript/JavaScript code
- This wouldn't change the runtime behavior of existing JavaScript code
- This could be implemented without emitting different JS based on the types of the expressions
- This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
- This feature would agree with the rest of TypeScript's Design Goals.
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 esaminando il percorso di type-checking di TypeScript per l’operatore new e i tipi restituiti dai costruttori; l’issue non specifica alcun file, test o punto di ingresso. Usa gli esempi JavaScript come riferimento comportamentale, inclusi i costruttori che restituiscono un Date o una Promise, e assicurati che i tipi inferiti corrispondano al risultato a runtime senza modificare il JavaScript emesso.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- javascript, typescript
- Ambito
- compilers
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100