带接口的typehint类构造函数

时间:2019-01-18 21:27:33

标签: typescript

我有以下界面

interface IDownloader {
    download()
}

和实现它的几个类:

class DownloaderA implements IDownloader {
...
}

class DownloaderB implements IDownloader {
...
}

然后,我有一个应该接收Downloader类的构造函数作为参数的类。当我指定这样的特定下载器时,我可以做到:

class DownloadWorker {
    constructor(downloader: typeof DownloaderA) {
    }
}

但是我不能以相同的方式键入接口:

class DownloadWorker {
    constructor(downloader: typeof IDownloader) {
    }
}

如何键入提示downloader参数,以便可以传递DownloaderA和DownloaderB构造函数?

1 个答案:

答案 0 :(得分:0)

您可以使用构造函数签名:

class DownloadWorker {
    constructor(downloader: new () => IDownloader) {
    }
}

签名类似于函数签名,但是new使其可以由new运算符调用以创建新对象。

以上代码接受不带参数的构造函数(即类)。您可以添加特定的参数,或将其定义为new (...a:any[]) => IDownloader,以允许带有任何参数的构造函数。