microsoft / microsoft/TypeScript

Type the tagName string property of Element derivations to aid overloading and for discriminated unions

Abierto
#26,860 0 comentarios 2 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

In Discussion Suggestion
Lenguaje dominante
Go
Estrellas
111k
Forks
14.3k
Merge medio
2 d 4 h
PR fusionados (30 d)
132

Descripción

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)

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza en lib.dom.d.ts y revisa la jerarquía de Element y las declaraciones de elementos SVG concretas mencionadas en el issue. Determina el alcance previsto para los tipos literales de tagName y cómo deben admitir las declaraciones los overloads y las uniones discriminadas. Se considera terminado cuando las declaraciones pertinentes proporcionan el narrowing solicitado sin cambiar el comportamiento de JavaScript en tiempo de ejecución.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
typescript
Área
frontend
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
30/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.