我正在学习打字稿。我发现了一个奇怪的行为。静态属性有多个实例。在这种情况下,person
类为2,student
类为1。我用其他语言检查过,在c#中它是一个实例,与声明类共享,所有类派生自该类。
class person
{
name : string
static maxAge : number
constructor(name:string)
{
this.name = name
}
}
class student extends person
{
standard : string
constructor(name:string,standard : string)
{
super(name);
this.standard = standard;
}
}
person.maxAge = 120;
console.log(person.maxAge);
console.log(student.maxAge);
我的问题是。
答案 0 :(得分:1)
我想了解为什么静态属性不与派生类共享?
在继承时共享 。而不是person.maxAge = 120;
你应该:
class person
{
name : string
static maxAge : number = 120
constructor(name:string)
{
this.name = name
}
}
class student extends person
{
standard : string
constructor(name:string,standard : string)
{
super(name);
this.standard = standard;
}
}
console.log(person.maxAge);
console.log(student.maxAge);
编译器是否遗漏了这些内容,并且无法提供任何编译错误?
没有。如果您说:
,编译器会信任您,就像它会信任您一样let foo: number;
console.log(foo); // No error
foo = 123;
编译器不是通灵的(尽管TypeScript有时会感觉像这样)但是尽力防止错误。
答案 1 :(得分:0)