构造函数方法未在 Typescript 中设置属性

Contructor method isnt setting an attribute in Typescript

我正在使用 typescript 和 typeorm;

我在这里创建了一个存储库 class,它使用 typeorm 中的方法,然后我在我的控制器 class 中使用一个构造函数来获取这个存储库作为一个属性,但由于某些原因它没有在我的其他方法中识别 this.teamRepo,虽然当我在我的构造函数中 console.log(this.teamRepo) 或在它工作的 cosntructor 中调用 repo 方法时,当我在我的 [=34 之外创建一个常量时=] 或在方法内部它也工作正常;

第一段代码是我尝试工作的方式,调用 teamRepo 作为我的控制器的属性 class,第二段代码是我如何获得它的示例 运行 而且我不知道它以一种方式起作用但以另一种方式不起作用:

欢迎任何帮助:)

class TeamController {

    private teamRepo: TeamRepository;

    constructor() {
        const repo = new TypeOrmTeamRepo(); 
        this.teamRepo = new TeamRepository(repo);
        // console.log(this.teamRepo) ==> recieve corret
    }

    public async addTeam(request: Request, response: Response) {
        try {
            // console.log(this.teamRepo) ==> recieve undefined
            const { teamName } = request.body;
           
            const newTeam = await this.teamRepo.create(teamName);
            console.log(newTeam);

            return response.json(newTeam)
        } catch(error) {
            console.log(error);
            return response.status(404).json(error);
        }
    }
};
const teamRepo: TeamRepository = new TeamRepository(new TypeOrmTeamRepo()); //here

class TeamController {
    public async addTeam(request: Request, response: Response) {
        try {
            const teamRepo: TeamRepository = new TeamRepository(new TypeOrmTeamRepo()); //or here
            const { teamName } = request.body;

            const newTeam = await teamRepo.create(teamName););
            console.log(newTeam);

            return response.json(newTeam)
        } catch(error) {
            console.log(error);
            return response.status(404).json(error);
        }
    }
};

存储库代码如下:

class TeamRepository implements IBaseTeamRepo {
    private repository: IBaseTeamRepo;

    constructor(repository: IBaseTeamRepo) {
        this.repository = repository;
    }

    public async create(team: BaseTeamModel): Promise<any> {
        return await this.repository.create(team);
    }
}

export default class TypeOrmTeamRepo implements IBaseTeamRepo {
    public async create(newTeamName: string): Promise<any> {
        try {
            const teamRepo = await getRepository(Team);
            console.log(newTeamName);

            const newTeam = await teamRepo.create({
                teamName: newTeamName
            });

            await teamRepo.save(newTeam);
    
            return newTeam;
        } catch(error) {
            return error;
        }
    }
};

和接口:

interface BaseTeamModel {
    teamName: string;
};

interface IBaseTeamRepo {
    create(BaseTeamModel): Promise<any>;
};

export {
    BaseTeamModel,
    IBaseTeamRepo,
}

这里是 routes.ts:


const teamController = new TeamController();

const adminRoutes = express.Router();

adminRoutes.post("/", teamController.addTeam);

似乎问题出在我调用 addTeam 的方式上,它在错误的范围内,所以没有识别出 this.teamRepo 正确的 wya,感谢 Chistoph 的帮助:

只需要将routes.ts改为:

const teamController = new TeamController();

const adminRoutes = Router();

adminRoutes.post("/", (request: Request, response: Response) => {
        return teamController.addTeam(request, response);
});