我有此代码:
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'.
我一直在搜索它,但是之前找不到任何满足我情况的问题。
那么,有没有办法实现这一目标?
答案 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>)[] = []) { }
}