microsoft / microsoft/TypeScript
Type the tagName string property of Element derivations to aid overloading and for discriminated unions
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
tagName, nodeName
Suggestion
Typing the tagName property in lib.dom.d.ts for Element and derivations ( or only concrete derivations and a discriminated type alias of these )
e.g
interface SVGGElement extends SVGGraphicsElement {
//..existing definition
tagName:"g"
}
Use Cases
Simpler to write overloads, overloaded by single argument type ( order does not matter )
Discriminated Unions
Examples
interface SVGCircleElement{
tagName:"circle"
}
interface SVGGElement{
tagName:"g"
}
interface SVGRectElement{
tagName:"rect"
}
Without above order matters with overload
adopt(node: SVGGElement): G;//issue with this before circle overload
adopt(node: SVGCircleElement): Circle;
With above and
type SVGTestUnionType=SVGCircleElement|SVGRectElement;
function(circleOrG:SVGTestUnionType){
switch(circleOrG.tagName){
case "circle":
//circle members available
break;
case "rect":
//rect members available
break;
}
}
Checklist
My suggestion meets these guidelines: YES
- 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. new expression-level syntax)
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 in lib.dom.d.ts ed esamina la gerarchia di Element e le dichiarazioni degli elementi SVG concreti menzionate nell’issue. Determina l’ambito previsto per i tipi letterali di tagName e come le dichiarazioni debbano supportare gli overload e le unioni discriminate. Il lavoro è completo quando le dichiarazioni pertinenti forniscono il narrowing richiesto senza modificare il comportamento di JavaScript a runtime.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- frontend
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 30/100