Я использую библиотеку
Awilix для создания DI контейнера. Содержимое файла
DI.ts такое:
import * as _ from 'lodash';
import {ModuleDescriptor} from "awilix";
const awilix = require('awilix');
const container = awilix.createContainer();
// Загружаем в контейнер сервисы (службы) реализующие бизнес логику
container.loadModules([
[
__dirname + '/../services/*.ts',
{
register: awilix.asClass,
lifetime: awilix.Lifetime.SINGLETON,
}
]
], {
formatName: (name:string, descriptor:ModuleDescriptor) => {
return _.lowerFirst(name) + 'Service';
},
resolverOptions: {
lifetime: awilix.Lifetime.SINGLETON,
register: awilix.asClass,
}
});
export default container.cradle;
Использую так:
import Statement from "../services/Statement";
import DI from "../System/DI";
/** @type Statement */
let service = DI.statementService;
и работает это нормально, но крайне неудобно, что IDE (у меня это PHPStorm) не понимает, что внутри DI есть свойство statementService и это объект Statement. Пытаюсь это делать через JSDocs, но не срабатывает. Можно ли ему это как-то подсказать?
UPD: Понял, что type для let срабатывает, если делать export default container.cradle в DI.ts. Но хочется больше. Хочется в DI.ts это прописать и что бы IDE это поняла.