Получить параметры типов конструктора в виде кортежа - PullRequest
2 голосов
/ 14 июня 2019

У меня есть этот код:

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 Ответ

4 голосов
/ 14 июня 2019

Вам нужно использовать 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>)[] = []) { }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...