获取构造函数的参数类型作为元组

时间:2019-06-14 13:41:13

标签: typescript constructor

我有此代码:

class Route {
  constructor(
    public method: 'get' | 'post' | 'update' | 'delete',
    public path: string,
    public handler: () => string,
  ) {}
}

class Router {
  constructor(private routes: (Route | Parameters<typeof Route.constructor>)[] = []) {}
}

我要实现的目标是使Router接受Route对象的数组或仅接受构造Route s的参数数组,如下所示:

const router = new Router([
  new Route('get', '/', () => 'Hello, world!'),

  // or
  ['get', '/', () => 'Hello, world!'],
]);

我知道Parameters可用于获取元组函数的参数,它通常适用于所有函数和方法,但是当我尝试将其与任何构造函数一起使用时,编译器会出现以下错误: Type 'Function' does not satisfy the constraint '(...args: any) => any'.

我一直在搜索它,但是之前找不到任何满足我情况的问题。

那么,有没有办法实现这一目标?

1 个答案:

答案 0 :(得分:4)

您需要直接在ConstructorParameters上使用typeof Route

class Route {
    constructor(
        public method: 'get' | 'post' | 'update' | 'delete',
        public path: string,
        public handler: () => string,
    ) { }
}

class Router {
    constructor(private routes: (Route | ConstructorParameters<typeof Route>)[] = []) { }
}