[英]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.