是否有一种方法可以创建具有设置类型参数和返回值的方法?



我正在创建一个处理快速路线的模块。我创建了一个程序,它从目录.

中的类调用方法。这个类的例子可以在这里看到。

class UsersController {
private ping(_: any, response: Response) {
response.status(200).send({ message: "Pong!" });
}
public get(): RouteDeclaration[] {
return [{ path: "/ping", method: "get", action: this.ping }];
}
}

我想知道是否有可能,例如用一些抽象类扩展类,这可以让我做一些像所有方法的通配符:

abstract class RouteController {
abstract get(): RouteDeclaration[];
abstract *(request: Request, response: Response, next: NextFunction): void; // like this!
}

是否有可能以某种方式通配符这些方法没有特定的名称毕竟?

我认为你可以用这样的索引签名来实现它:

type Method = (req: Request, res: Response, next: NextFunction) => void;
abstract class RouteController {
abstract get(): RouteDeclaration[];
[key: string]: Method;
}
class UserController extends RouteController {
private ping(_: any, response: Response) {
response.status(200).send({ message: "Pong!" });
}
get() {
return [{ path: "/ping", method: "get", action: this.ping }];
}
myMethod: Method = (req, res, next) => {
// implementation
};
otherMethod: Method = (req, res, next) => {
// implementation
};
// this will give a compiler error:
illegalMethod(v: number): string {
return "";
}
}

我期望编译器自动推断UserController类中方法的参数和返回类型,但这似乎只适用于简单类型。这就是为什么最好将签名提取为Method之类的东西并将其用于方法实现的原因。当然,你也可以让它们成为真正的方法,但是你必须为每个方法指定参数的类型和返回类型。

不可能。抽象方法应该有一个方法签名,这意味着要实现的方法有一个方法名。

我建议你创建一个通用的方法名,如execute

最新更新