在typescript中有没有办法创建匿名类?
我的代码:
export abstract class Runnable {
public abstract run();
}
Run Code Online (Sandbox Code Playgroud)
而我正在尝试做这样的事情:
new Runnable {
runner() {
//implement
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
小智 51
是的,这就是方法。
抽象类:
export abstract class Runnable {
public abstract run();
}
Run Code Online (Sandbox Code Playgroud)
匿名实现:
const runnable = new class extends Runnable {
run() {
// implement here
}
}();
Run Code Online (Sandbox Code Playgroud)
Nit*_*mer 20
不完全,但你可以这样做:
abstract class Runnable {
public abstract run();
}
let runnable = new (class MyRunnable extends Runnable {
run() {
console.log("running...");
}
})();
runnable.run(); // running...
Run Code Online (Sandbox Code Playgroud)
(游乐场代码)
然而,这种方法的问题在于解释器将在每次使用它时对该类进行评估,这与编译器仅对其进行一次计算的编译语言(例如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;
}
Run Code Online (Sandbox Code Playgroud)
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");
});
Run Code Online (Sandbox Code Playgroud)
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();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12632 次 |
| 最近记录: |