Функция import()
фактически импортирует весь объект CommonJS exports
.Проверяя типы из @types/express-session
, мы имеем:
[...]
declare function session(options?: session.SessionOptions): express.RequestHandler;
declare namespace session {
interface SessionOptions {
secret: string | string[];
name?: string;
store?: Store | MemoryStore;
cookie?: express.CookieOptions;
genid?(req: express.Request): string;
rolling?: boolean;
resave?: boolean;
proxy?: boolean;
saveUninitialized?: boolean;
unset?: string;
}
[...]
export = session;
На данный момент export = session
фактически эквивалентно exports.default = session
(все еще немного сбивает с толку, что компилятор понимает session
как ссылку на функция , а не как пространство имен ), и это приводит к решению:
async init() {
try {
const session = (await import('express-session')).default
this.app.use(session({secret: 'my_secure_secret'}))
this.app.set('hasSession', true)
} catch (e) {
console.log('Failed to load session, continue without it')
this.app.set('hasSession', false)
}