我有类似的东西;
TestBase.ts
export class TestBase {
static myValue: boolean;
constructor() {
TestBase.myValue = true;
}
}
测试
import {TestBase} from './TestBase'
export class Test extends TestBase {
constructor() {
super();
}
}
SomeOtherClass.ts
import {Test} from './Test';
import {TestBase} from './TestBase';
export class SomeOtherClass {
constructor() {
var test = new Test();
console.log(Test.myValue); // undefined
Test.myValue = false;
console.log(Test.myValue, TestBase.myValue); // false, true
}
}
我的IDE建议myValue
上Test
可用,但在运行时它并不反映TestBase.myValue
的值。 IDE是否错误地建议允许静态属性继承,或者是browserify / tsify是否破坏了什么?
答案 0 :(得分:0)
我不认为它与打字稿有关,你的IDE是正确的。静态成员是继承的(link)。我已在node.js环境以及chrome浏览器中尝试过您的示例并输出
真
false,true
正如所料。所以我猜你是正确的,假设其他东西弄糟了,也许是浏览器化。
答案 1 :(得分:0)
class TestBase {
static myValue: boolean;
constructor() {
TestBase.myValue = true;
}
}
class Test extends TestBase {
constructor() {
super();
}
}
class SomeOtherClass {
constructor() {
var test = new Test();
console.log(Test.myValue); // undefined
Test.myValue = false;
console.log(Test.myValue, TestBase.myValue); // false, true
}
}
class HelloWorld{
public static main(){
let some = new SomeOtherClass();
}
}
HelloWorld.main();
我认为它是未定义的,因为只有在为该类调用构造函数时才初始化。
由此改变。
class TestBase {
static myValue: boolean = true;
constructor() {
TestBase.myValue = true;
}
}
console.log(Test.myValue); // true
Test.myValue = false;
console.log(Test.myValue, TestBase.myValue); // false, true
您可能已经知道,但您不需要构建一个对象来调用静态成员。
首次构建对象Test.myValue
时,TestBase.myValue
和var test = new Test();
未定义。对于TestBase
,constructor
中的TestBase.myValue = true;
级更改,情况恰好如此,但不适用于Test,因为您静态访问Test.myValue或TestBase.myValue,TestBase.myValue
创建要更改的对象但不在Test
。
应用于原始代码:
class SomeOtherClass {
constructor() {
console.log(Test.myValue); // undefined
console.log(TestBase.myValue); // undefined
var test = new Test();
console.log(Test.myValue); // undefined
console.log(TestBase.myValue); // true
}
}
答案 2 :(得分:0)
在Typescript中,静态基元不会以我期望的方式继承,但是静态对象是。我能够通过将值保存在对象中来解决该问题;
<强> TestBase.ts 强>
export class TestBase {
static someObject = { myValue: boolean };
constructor() {
TestBase.someObject.myValue = true;
}
}
<强>测试强>
import {TestBase} from './TestBase'
export class Test extends TestBase {
constructor() {
super();
}
}
<强> SomeOtherClass.ts 强>
import {Test} from './Test';
import {TestBase} from './TestBase';
export class SomeOtherClass {
constructor() {
var test = new Test();
console.log(Test.someObject.myValue); // true
Test.myValue = false;
console.log(Test.someObject.myValue, TestBase.someObject.myValue); // false, false
}
}
答案 3 :(得分:-1)
尝试作为成员级实例的类级别属性将不起作用。我们需要声明为成员实例并初始化为成员实例而不是类对象
export class TestBase {
static myValue: boolean;
constructor() {
this.myValue = true;
}
}
答案 4 :(得分:-1)
您根本无法继承静态属性或方法。