javascript - TypeScript guarda el tipo como indefinido
class A {
private static readonly letters: { [type: string]: any; } = { 'b' : B }
public static check(): void {
console.log(A.letters)
let letters: { [type: string]: any; } = { 'b' : B }
console.log(letters)
}
}
class B extends A {
}
A.check()
Resultado :
{ b: undefined }
{ b: { [Function: B] check: [Function], letters: { b: undefined } } }
¿Por qué exactamente el primer registro es indefinido?
Respuesta #1
Como escribió @E.Sundin en su comentario, la clase B no existe cuando se evalúa la clase A.
Necesitarás tener un inicializador estático:
class A {
private static readonly letters: { [type: string]: any; }
public static init() {
(this as any).letters = { 'b' : B }
}
...
}
...
A.init()
A.check()
(código en el área de juegos)
Debido a que querías que A.letter fuera readonly, hay una conversión de this a any, de lo contrario el compilador se queja de la asignación a una propiedad de solo lectura.
Otra opción es asignar un objeto vacío y luego llenarlo:
class A {
public static readonly letters: { [type: string]: any; } = {};
...
}
class B extends A { }
A.letters["b"] = B;
Pero entonces A.letters necesita ser público, puedes moverlo fuera de A para mantenerlo "oculto":
const letters: { [type: string]: any; } = {};
class A { ... }
A.letters["a"] = A;
class B extends A { }
letters["b"] = B;
