Я пытаюсь реализовать внедрение зависимостей в typescript с помощью Deno, однако у меня возникла проблема с Reflect.getMetadata('design:paramtypes', ...)
, которая возвращает значение undefined
, и я не понимаю, почему.
Deno 1.6.0
Ubuntu 18.04.5 LTS
Я использую этот файл как Reflect: https://github.com/edualb/dependencyInjectionPOC/blob/main/Reflect.ts
tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"lib": ["es5", "es6", "dom"],
}
}
decorator.ts
export interface Type<T> {
new(...args: any[]): T;
}
export function Injectable(): (target: Type<any>) => void {
return (target: Type<any>) => {}
}
service2.ts
import { Injectable } from './decorator.ts';
@Injectable()
export class Service2 {
constructor() {}
}
service.ts
import { Injectable } from './decorator.ts';
import { Service2 } from './service2.ts';
@Injectable()
export class Service {
constructor(private s2: Service2) {}
}
main.ts
import { Reflect } from './Reflect.ts';
import { Service } from './service.ts';
console.info(Reflect.getMetadata('design:paramtypes', Service)) // here is returning undefined
Команда, используемая для выполнения:
$ deno run main.ts
Гитхаб: https://github.com/edualb/dependencyInjectionPOC
Может кто поможет с этим вопросом?
Я решил эту проблему, установив флаг -c
/ --config
в команду выполнения:
$ deno run -c tsconfig.json main.ts
См. https://deno.land/[email protected]/advanced/typescript/configuration:
Рекомендуется использовать deno.json
вместо tsconfig.json
…
Минимальный пример для deno.json
:
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"jsx": "react-jsx",
"jsxImportSource": "preact"
}
}
тогда такие вещи, как
Reflect.getMetadata("design:type", target, key);
и т.д. работают.