typescript 有没有办法用箭头函数指定函数类型?

a0x5cqrl  于 2023-02-05  发布在  TypeScript
关注(0)|答案(3)|浏览(164)

我使用express,我知道你可以做以下设置请求处理程序的类型。

router.get("/", <RequestHandler> function (req, res, next) {
  //Manage request here
});

有没有办法对箭头函数做同样的事情?我知道我可以只指定每个参数的类型,但我认为这有点冗长。
我知道这行得通

router.get("/", (req: Request, res: Response, next: NextFunction) => {
  //Manage request here
});

但这样的事情能成功吗?

router.get("/", <RequestHandler>(req, res, next) => {
  //Manage request here
});

对于每个参数,我都得到以下错误。
参数“req”隐式具有“any”类型。

qvtsj1bj

qvtsj1bj1#

使用箭头函数时,必须用圆括号将整个函数表达式括起来,以避免语法问题。

router.get("/", <RequestHandler>((req, res, next) => {
  //Manage request here
}));

as的另一个选项

router.get(
  "/",
  ((req, res, next) => {
  //Manage request here
  }) as RequestHandler
)

另一种选择是,事先将回调声明为独立变量,从而完全避免类型Assert

const callback: RequestHandler = (req, res, next) => {
  //Manage request here
} as RequestHandler;

router.get("/", RequestHandler);
wpcxdonn

wpcxdonn2#

如果您使用的是Typescript 4.9+,则可以使用satisfies关键字:

interface AddFunc {
    (a: number, b: number): number;
}

const add = ((a, b) => {
    return a + b
}) satisfies AddFunc;
wixjitnu

wixjitnu3#

尝试这样做:<RequestHandler<{type1; type2; type3}>>或者您可以创建单独的接口

相关问题