typescript 打字稿匿名类
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/42766986/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Typescript anonymous class
提问by user1137582
Is there a way in typescript to create anonymous class?
打字稿中有没有办法创建匿名类?
my code:
我的代码:
export abstract class Runnable {
public abstract run();
}
and I'm trying to do something like this:
我正在尝试做这样的事情:
new Runnable {
runner() {
//implement
}
}
How can I do it?
我该怎么做?
回答by Nitzan Tomer
Not quite, but you can do this:
不完全是,但你可以这样做:
abstract class Runnable {
public abstract run();
}
let runnable = new (class MyRunnable extends Runnable {
run() {
console.log("running...");
}
})();
runnable.run(); // running...
(操场上的代码)
The problem with this approach however is that the interpreter will evaluate the class every time it uses it, unlike with a compiled language (such as java) in which the compiler only evaluates it once.
然而,这种方法的问题在于,解释器每次使用类时都会对其进行评估,这与编译器只对其进行一次评估的编译语言(例如 java)不同。
回答by Michal
Yes, here is the way.
是的,这就是方法。
The abstract class:
抽象类:
export abstract class Runnable {
public abstract run();
}
An anonymous implementation:
匿名实现:
const runnable = new class extends Runnable {
run() {
// implement here
}
}();
回答by holi-java
How to create Anonymous Class?
如何创建匿名类?
Let's say you have a interface Runnable
and an abstract class Task
.when you declare a class Foo
in typescript you actual create an class instance of Foo
& a constructor function for the class Foo
.you could want to see depth in typescript.Anonymous class that ref as a constructor function like {new(...args):type}
that can be created using new
keyword.
比方说,你有一个接口Runnable
和抽象类Task
。当你声明一个类Foo
的打字稿你实际创建的类实例Foo
及该类的构造函数Foo
。你可能希望看到深度打字稿.Anonymous类,裁判的构造函数像{new(...args):type}
这样可以使用new
关键字创建。
interface Runnable {
run(): void;
}
abstract class Task {
constructor(readonly name: string) {
}
abstract run(): void;
}
Create anonymous class extends superclass via 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");
});
create anonymous class implements interface/type via 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();
});