簡體   English   中英

打字稿匿名類

[英]Typescript anonymous class

打字稿中有沒有辦法創建匿名類?

我的代碼:

export abstract class Runnable {
    public abstract run();
}

我正在嘗試做這樣的事情:

new Runnable {
    runner() {
        //implement
    }
}

我該怎么做?

是的,這就是方法。

抽象類:

export abstract class Runnable {
  public abstract run();
}

匿名實現:

const runnable = new class extends Runnable {
  run() {
    // implement here
  }
}();

不完全是,但你可以這樣做:

abstract class Runnable {
    public abstract run();
}

let runnable = new (class MyRunnable extends Runnable {
    run() {
        console.log("running...");
    }
})();

runnable.run(); // running...

操場上的代碼

然而,這種方法的問題在於,解釋器每次使用類時都會對其進行評估,這與編譯器只評估一次的編譯語言(例如 java)不同。

如何創建匿名類?

比方說,你有一個接口Runnable和抽象類Task 。當你聲明一個類Foo在打字稿你實際創建的類的實例Foo及該類的構造函數Foo 。你可能希望看到深度打字稿.Anonymous類ref 作為構造函數,如{new(...args):type}可以使用new關鍵字創建。

interface Runnable {
    run(): void;
}

abstract class Task {
    constructor(readonly name: string) {
    }

    abstract run(): void;
}

通過class extends ?創建匿名類擴展超class extends ?

test('anonymous class extends superclass by `class extends ?`', () => {
    let stub = jest.fn();
    let AntTask: {new(name: string): Task} = class extends Task {
        //anonymous class auto inherit its superclass constructor if you don't declare a constructor here.
        run() {
            stub();
        }
    };

    let antTask: Task = new AntTask("ant");
    antTask.run();

    expect(stub).toHaveBeenCalled();
    expect(antTask instanceof Task).toBe(true);
    expect(antTask.name).toBe("ant");
});

創建匿名類通過class ?實現接口/類型class ? .

test('anonymous class implements interface by `class ?`', () => {
    let stub = jest.fn();
    let TestRunner: {new(): Runnable} = class {
        run = stub
    };

    let runner: Runnable = new TestRunner();
    runner.run();

    expect(stub).toHaveBeenCalled();
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM