我正在創建一個模塊來處理Express路線。我已經創建了一個程式,它從目錄中的類中呼叫方法。
該類的例子可以在這里看到。
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 {
抽象的get()。RouteDeclaration[]。
抽象 *(request: Request, response: Response, next: NextFunction)。) void; // like this!
是否有可能以某種方式對這些方法進行通配符,畢竟沒有具體的名稱?
uj5u.com熱心網友回復:
這是不可能的。抽象方法應該有一個方法簽名,這意味著有一個方法名,可以被實作。
我建議你創建一個通用的方法名,比如execute。
uj5u.com熱心網友回復:
我認為你可以通過像這樣的索引簽名來實作:
type Method = (req: Request, res: 回應,下一步。NextFunction) => void;
抽象的 class RouteController {
抽象的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) => {
//實作。
};
otherMethod: Method = (req, res, next) => {
//實作。
};
//這將產生一個編譯器錯誤: //這將產生一個編譯器錯誤。
illegalMethod(v: number): string {
return ""。
}
我期望編譯器能自動推斷出UserController類中方法的引數和回傳型別,但這似乎只對簡單型別有效。這就是為什么最好將簽名提取為類似Method的東西,并將其用于方法的實作。當然,你也可以讓它們成為真正的方法,但你必須為每個方法指定引數型別和回傳型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332241.html
標籤:
