首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Typescript匿名类

Typescript匿名类
EN

Stack Overflow用户
提问于 2017-03-13 23:09:14
回答 3查看 27.1K关注 0票数 35

在typescript中有没有办法创建匿名类?

我的代码:

代码语言:javascript
复制
export abstract class Runnable {
    public abstract run();
}

我正试着做这样的事情:

代码语言:javascript
复制
new Runnable {
    runner() {
        //implement
    }
}

我该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2019-11-09 04:00:10

好的,这里就是路。

抽象类:

代码语言:javascript
复制
export abstract class Runnable {
  public abstract run();
}

一个匿名实现:

代码语言:javascript
复制
const runnable = new class extends Runnable {
  run() {
    // implement here
  }
}();
票数 54
EN

Stack Overflow用户

发布于 2017-03-13 23:15:28

不完全是,但您可以这样做:

代码语言:javascript
复制
abstract class Runnable {
    public abstract run();
}

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

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

(code in playground

然而,这种方法的问题在于,解释器在每次使用类时都会对其进行评估,这与编译器只对其进行一次评估的编译语言(如java)不同。

票数 25
EN

Stack Overflow用户

发布于 2017-03-14 01:26:41

如何创建匿名类?

假设您有一个接口Runnable和一个抽象类Task.when,您在typescript中声明了一个类Foo,您实际创建了Foo的一个类实例&Foo类的构造函数.you可能希望查看typescript.Anonymous类中的深度,它被引用为可以使用new关键字创建的构造函数,如{new(...args):type}

代码语言:javascript
复制
interface Runnable {
    run(): void;
}

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

    abstract run(): void;
}

创建匿名类通过class extends ?扩展超类

代码语言:javascript
复制
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 ?实现接口/类型。

代码语言:javascript
复制
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();
});
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42766986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档