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()
结果:
{ b: undefined }
{ b: { [Function: B] check: [Function], letters: { b: undefined } } }
为什么第一个日志是未定义的?
最佳答案
正如@E.Sundin 在他的评论中所写,当类 A
被求值时,类 B
不存在。
你需要有一个静态初始化器:
class A {
private static readonly letters: { [type: string]: any; }
public static init() {
(this as any).letters = { 'b' : B }
}
...
}
...
A.init()
A.check()
因为您希望 A.letter
为 readonly
,所以需要将 this
转换为 any
否则编译器提示分配给只读属性。
另一种选择是分配一个空对象,然后再填充它:
class A {
public static readonly letters: { [type: string]: any; } = {};
...
}
class B extends A { }
A.letters["b"] = B;
但是 A.letters
需要公开,您可以将它移到 A
之外以使其“隐藏”:
const letters: { [type: string]: any; } = {};
class A { ... }
A.letters["a"] = A;
class B extends A { }
letters["b"] = B;
关于javascript - TypeScript 将类型保存为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42180557/