Я пытаюсь реализовать свой собственный ORM, и я нашел что-то интересное в TypeScript, чего я не понимаю. Может быть, кто-то из вас может мне это объяснить, или, может быть, это ошибка машинописи.
Вот упрощенная структура basi c, где также присутствует это явление.
У нас есть свойство декоратор, который принимает один параметр типа класса.
// This is not required, only used to define the entityClass type more explicite
export abstract class Entity { }
export function Decorator(entityClass: typeof Entity) {
return function(target: any, propertyName: string) {
console.log(entityClass);
}
}
Файл с классом A: EntityA.ts
import { Entity, Decorator } from "./index";
import { EntityB } from "./EntityB";
export class EntityA extends Entity {
@Decorator(EntityB)
public propertyA: any;
}
Файл с классом B: EntityB.ts
import { Entity, Decorator } from "./index";
import { EntityA } from "./EntityA";
export class EntityB extends Entity {
@Decorator(EntityA)
public propertyB: any;
}
Немного кода для запуска машинописи, чтобы использовать декоратор для вывода console.log:
run.ts
import { EntityA } from "./EntityA";
import { EntityB } from "./EntityB";
const objA = new EntityA();
const objB = new EntityB();
При запуске этого скрипта я получаю:
undefined
[Function: EntityB]
Это undefined
- это явление. Теперь я удаляю в EntityA.ts эту строку @Decorator(EntityB)
и снова запускаю скрипт, и undefine
исчезает. Вместо этого я получаю ожидаемый результат:
[Function: EntityA]
Я что-то не так понял в декораторах или это ошибка машинописи?