作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想传递类的类型信息,并提示编译器给定的参数不是类的实例而是类定义。我该怎么做?
import * as Routes from '../routes';
import * as Entities from '../entities';
export class RouteManager {
public router = Router();
private connection = getConnectionManager().get();
constructor() {
this.addRoute(Routes.VideoRoute, Entities.Video);
}
addRoute(routeClass: AbstractRoute<AbstractEntity>, entity: AbstractEntity): void {
const instance = new routeClass(entity, this.connection.getRepository(entity))
this.router.get(instance.route, instance.find);
}
}
编译器在这里提示 new routeClass(entity, this.connection.getRepository(entity))
行,因为它认为 routeClass
是 AbstractRoute<AbstractEntity>
的实例而不是它的导出类定义。
我试过使用 AbstractRoute<AbstractEntity>.constructor
但 Typescript 似乎不知道这种结构。
最佳答案
这个语法看起来有点奇怪。基本上,您定义一个使用类似 new(...args: any[]) => T
的签名。当然,您可以通过将 T
替换为您的类并将 args
替换为 constructor
签名来更加严格。
我会推荐这样的东西:
class Foo {}
type Constructor<T> = new(...args: any[]) => T;
function createFoo(thing: Constructor<Foo>) { return new thing(); }
关于typescript - 如何在 Typescript 中将类定义指定为参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43606912/
我是一名优秀的程序员,十分优秀!