microsoft / microsoft/TypeScript

Support implicit invocations of `Symbol.toPrimitive` for statically-named properties

Abierto
#53,906 6 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

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

Descripción

Bug Report

Original Title: Type declaration merging of a class, a namespace and another type like symbol or string

Given the following declaration

const ASymbol = Symbol('A');

class A {
  static [Symbol.toPrimitive]() {
    return ASymbol;
  }
}

namespace A {
  export type T = any;
}

I get an error when I do this:

class TestClass {
  [A]() { // error

  }
}

The why doesn't matter. It's a bug because Typescript is a "superset" of Javascript and it works in the latter.

It can be worked around with hacks like

const AWrapper: typeof A & typeof ASymbol = A as any;

class TestClass2 {
  [AWrapper]() { // works

  }
  otherMethod() {
    this[AWrapper](); // although this still gives an error
  }
}

But then I'm not able to do this:

let o: AWrapper.T; // error

It loses the the namespace properties.

Is it possible to merge all type declarations so that at least the hack can be used?

🔎 Search Terms

declaration merging class namespace type symbol string intersection

🕗 Version & Regression Information

Playground Latest v5+

⏯ Playground Link

Playground

💻 Code

In the description

🙁 Actual behavior

Error

🙂 Expected behavior

No error, or at least a way to hack around.

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 la reproducción enlazada en TypeScript Playground y compara el error reportado de la propiedad calculada con el comportamiento equivalente de JavaScript. Sigue cómo el compilador comprueba la propiedad nombrada estáticamente y la combinación de declaraciones; se considera terminado cuando el ejemplo compila sin el error y el tipo de namespace combinado sigue siendo utilizable.

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

Evaluación

Stack tecnológico
typescript
Área
compilers
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
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.