microsoft / microsoft/TypeScript

Allowing subsequent property declarations of compatible types

Abierto
#33,699 8 comentarios 7 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Needs Proposal Suggestion
Lenguaje dominante
Go
Estrellas
111k
Forks
14.4k
Merge medio
1 d 19 h
PR fusionados (30 d)
117

Descripción

Search Terms

TS2717, subsequent property declarations

Suggestion

Let's assume following code:

Library typings:

interface Dictionary<T> {
   [key: string]: T;
}
interface Foo {
   methods: Dictionary<Function>;
}

User extension:

declare module "@awesome/library" {
     interface BagOfFunctions extends Dictionary<Function> {
         wellKnownFunction(foo: number): number;
     }
     
     interface Foo {
           methods: BagOfFunctions;
      }
}

Currently, it results in TS2717. After this change, such code will be allowed.

Use Cases

Use case: Hapi allow user to define global functions with shared cache (server.method).

Unfortunely, server.methods is currently defined as Dictionary<ServerMethod> and end users aren't able to get type safety when calling them.

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.

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 con el diagnóstico TS2717 y el comportamiento de combinación de declaraciones mostrado en los ejemplos. Compara el rechazo actual de Foo.methods con la aceptación solicitada de BagOfFunctions y, después, define la cobertura para redeclaraciones compatibles e incompatibles. Se considera terminado cuando la extensión de ejemplo se acepta sin debilitar los errores de propiedades incompatibles.

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
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.