2

私はこのようなものを持っています。

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
    }
}

myValue私の IDE はで利用できることを示唆してTestいますが、実行時には の値が反映されませんTestBase.myValue。静的プロパティの継承が許可されていることを IDE が誤って示唆していますか、それとも browserify/tsify が何かを壊していますか?

4

5 に答える 5

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未定義です。これは,でのそのクラスの変更には当てはまりますが、Test には当てはまりません。これは、Test.myValue に静的にアクセスするか、TestBase.myValue にアクセスし、オブジェクトを作成した後に変更するが では変更しないためです。TestBase.myValuevar test = new Test();TestBaseconstructorTestBase.myValue = true;TestBase.myValueTest

元のコードに適用:

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
    }
}
于 2016-03-23T08:27:31.933 に答える
-1

静的プロパティまたはメソッドを継承することはできません。

于 2016-03-23T07:50:34.393 に答える