javascript - expressjs: typescript: 'typeof ' türündeki argüman, 'RequestHandlerParams' türündeki parametreye atanamaz


En son typescript tanım dosyası ve https://github.com/DefinitelyTyped/DefinitelyTyped adresinden typescript 2.3.4 ile expressjs kullanıyorum. Bir yönlendirici tanımladım ve resmi 4.x belgelerinde belirtildiği gibi bir alt yoldan kullanmak istiyorum (app.use('/calendar', router);), ancak aşağıdaki hatayı alıyorum

Error: /Users/matthias/Documents/private workspace/universal/src/server/server.ts (161,34): Argument of type 'typeof "/Users/matthias/Documents/private workspace/universal/src/server/routes/login.router"' is not assignable to parameter of type 'RequestHandlerParams'.
  Type 'typeof "/Users/matthias/Documents/private workspace/universal/src/server/routes/login.router"' is not assignable to type '(RequestHandler | ErrorRequestHandler)[]'.
    Property 'length' is missing in type 'typeof "/Users/matthias/Documents/private workspace/universal/src/server/routes/login.router"'.

Bu benim kullandığım yönlendirici, gerçek kodu atlıyorum...

const router : express.Router = express.Router();
let loginController = new LoginController();

router.post('/signin', function(req: express.Request, res: express.Response, next: express.NextFunction) {

  ...

  })(req, res, next);
});

...

export default router;

... ve bu, ona yapılan çağrının kısaltılmış versiyonudur.

import * as loginRouter from './routes/login.router';

private app = express();
this.app.use('/api/v1/auth', loginRouter);

Yanlış bir şey mi yapıyorum yoksa bu kullanım durumu sadece TypeScript tanım dosyalarında düzgün bir şekilde tanımlanmamış mı?

Saygılarımla

Cevap #1

Buldum, import * as ... tipi bilgilerini (IRouter, Router) kaybediyor gibi görünüyor

Çözüm olarak import loginRouter from './routes/login.router'; kullanmaktır

Cevap #2

Bu sorunu kaldırarak çözdüm

export default router;

yönlendirici modülümün sonunda. Oluşturduğum yerde basitçe onu dışa aktardım

export const router = express.Router();

ve ardından modülün herhangi bir ithalatını buna göre güncelledi.

Derleyicinin varsayılan ihracatla neden sorun yaşadığını bilmiyorum, ama TypeScript'in varsayılan ihracatlarının ECMAScript'in varsayılan ihracatlarıyla aynı olmadığını biliyorum.

İlgili makaleler