microsoft / microsoft/TypeScript

Add Support for design-time decorators

Abierto
#2,900 52 comentarios 148 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

Now that decorators are supported in TypeScript (#2249), consider adding support for ambient/design-time-only decorators:

Ambient decorators can be an extensible way to declare properties on or associate special behavior to declarations; design time tools can leverage these associations to produce errors or produce documentation. For example:

Use cases:
  • Deprecated/Obsolete, to support warning on use of specific API’s:
interface JQuery {  
    /**  
     * A selector representing selector passed to jQuery(), if any, when creating the original set.  
     * version deprecated: 1.7, removed: 1.9  
     */  
    @@deprecated("Property is only maintained to the extent needed for supporting .live() in the jQuery Migrate plugin. It may be removed without notice in a future version.", false)  
    selector: string;  
}
  • Suppress linter warning:
@@suppressWarning("disallow-leading-underscore")   
function __init() {  
}
Proposal

Design-time (Ambient) decorators are:

  • ambient functions
  • have a special name starting with "@"
  • are not emitted in output JS code, but persisted in .d.ts outputs.

Application

  • Applying a design-time can only accept constant values. Variables would not be observable by the compiler at compile time. Here is the set of possible values:
    • string literal,
    • number literal,
    • regexp literal,
    • true keyword,
    • false keyword,
    • null keyword,
    • undefined symbol,
    • const enum members,
    • array literals of one of the previous kinds,
    • object literal with only properties with values of one of the previous kinds

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

Empieza leyendo esta propuesta junto con TypeScript issue #2249 y la compatibilidad existente con decoradores. Determina el diseño para las funciones ambient, los argumentos que solo contienen constantes y la preservación de .d.ts; el trabajo estará terminado cuando los decoradores en tiempo de diseño sean aceptados, se omitan de la salida de JavaScript y se conserven en la salida de declaraciones.

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

Evaluación

Stack tecnológico
typescript
Área
compilers
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
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.