【问题标题】:How to pass one class to another in Typescript? [closed]如何在 Typescript 中将一个类传递给另一个类? [关闭]
【发布时间】:2020-10-23 00:02:26
【问题描述】:

我有以下类 UserRepo:

import User from './UserModel'
export default class UserRepo { 
   async createUser(user: {name: string}): Promise<User>{
       const user = new User(user);
       return await user.save()
  }
}

我想导出这个类并在构造函数中将它绑定到另一个类中,这样我就可以在另一个类中访问这个方法createUser(以及类UserRepo的整个实例)。例如 this.UserRepo.createUser({name: "Bob"});

我对新课程的想法的伪代码:

import User from './UserModel'
import UserRepo from './UserRepo';

interface IUserImplementation {
    insertUser(user: {name: string}): Promise<User>
}

export default class UserImplementation implements IUserImplementation {
    constructor(UserRepo) {
        this.userRepo = new UserRepo();
    }
    
    async insertUser(user: {name: string}){
        const data = await this.userRepo.createUser(user);
    }
}

【问题讨论】:

    标签: javascript node.js typescript oop


    【解决方案1】:

    您可能希望实现dependency injection 模式。

    推荐:

    export default class UserImplementation implements IUserImplementation {
        constructor(UserRepo: UserRepo) { // have the user create the UserRepo instance
            this.userRepo = UserRepo;
        }
        
        async insertUser(user: {name: string}){
            const data = await this.userRepo.createUser(user);
        }
    }
    

    你也可以这样做:

    
    export default class UserImplementation implements IUserImplementation {
        constructor() { // nothing
            this.userRepo = new UserRepo(); // create instance in constructor
        }
        
        async insertUser(user: {name: string}){
            const data = await this.userRepo.createUser(user);
        }
    }
    

    【讨论】:

    • 嗨@saulmaldonado,感谢您的澄清,我正在寻找依赖注入。但是,我仍然对推荐的方法感到困惑。我应该有另一个文件来创建 UserImplementation 类的实例吗?类似于: const urepo = new UserRepo(); const uimplementation = new UserImplementation(urepo)?
    • 是的,没错!这允许您创建UserRepo,对其状态进行任何添加或更改(一个很好的例子可以是数据库连接或数据库名称),并将其传递给UserImplementation 以供使用。如果需要,您还可以将相同的 UserRepo 实例传递给其他类,并将其用作应用程序的全局服务
    猜你喜欢
    • 1970-01-01
    • 2023-01-25
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多