【问题标题】:Refactor Typescript class into two functions将 Typescript 类重构为两个函数
【发布时间】:2021-06-12 12:19:46
【问题描述】:

我在 Node JS 和 Typescript 中有一个项目,其中我有一个带有类的文件,用于检查目录是否存在并创建另一个目录。我向该方法传递了两个参数,主目录('src/out')和一个用于创建以下目录('api')的字符串。

这是我的课,dir 变量('src / out')和api 变量('api'):

export class createDir {
    checkExistsOrCreate(dir: string, api: any) {
        let dire = `${dir}${api}`;
        if (!fs.existsSync(dir)){
            fs.mkdirSync(dir);
        }
        if (fs.existsSync(dire)) {
            rimraf.sync(dire);
            fs.mkdirSync(dire);
        }else {
            fs.mkdirSync(dire);
        }
        return dire;
    }
}

我想做的是创建两个函数:第一个是我传递主目录('src / out')并检查它是否存在。第二个创建目录,如果principal不存在,则创建principal目录和api目录('src/out/api'),如果principal存在则只创建'/api'目录。

我的问题是我不知道如何分离两个函数以及如何判断第二个函数是否存在主目录。

这是第一个只检查到达它的目录是否存在的函数:

export class exists {
    exitsDir(dir: string) {
        if (!fs.existsSync(dir)){
            return false;
        }else{
            return true;
        }
    }
}

这是我调用目录检查并将目录传递给检查的类:

class UtilsController {

    public async utilsDir () {

        try {
            let checkDir = new exists();
            await checkDir.exitsDir('src/out');         
        } catch (error) {
            console.log(error);
        }
    }
}

【问题讨论】:

    标签: node.js typescript refactoring


    【解决方案1】:

    实际上mkdir 函数可以在使用recursive 选项时自动处理您的用例。

    const fs = require('fs');
    fs.mkdirSync('main/sub', {recursive: true});
    

    【讨论】:

    • 我不知道递归选项是什么。我从来没见过。对于我在从另一个类调用它时已经传递了目录的函数,所以检查它是否存在的函数已经接收到一个带有目录的变量。我不知道的是如果目录存在与否,如何告诉创建它的函数。
    • 我在反馈中链接的mkdir 文档解释了recursive 选项,您可以尝试运行我的示例。
    • 我已经用检查目录是否存在的函数更新了这个问题,我现在想要知道如何将 true 或 false 返回到创建文件的函数以知道我是否必须创建不管是不是
    • 我认为您最初关于如何创建子目录的问题可以通过使用mkdirrecursive 选项来最简单地解决。如果您想手动实现逻辑并且(无论出于何种原因)还想保留类定义,则需要实例化一个 exists 对象并调用 exitsDir 函数。
    【解决方案2】:

    有很多类并不是真正需要的,但这应该可以工作:

    class UtilsController {
        public utilsDir(): Promise<boolean> {
            try {
                const checkDir = new exists();
                return checkDir.exitsDir('src/out');         
            } catch (error) {
                console.log(error);
            }
        }
    }
    
    const test = async () => {
        const utilsController = new UtilsController();
        const exists = await utilsController.utilsDir();
        console.log(exists);
    };
    
    

    【讨论】:

    • 我想我没有很好地解释自己,这就是我想要实现的目标:1)从UtilsController我调用存在并将我想要检查的目录传递给它('scr / out' ), 2) 如果不存在则返回false,如果存在则返回true
    • 3) 如果它不存在,则调用createDir 函数(尚未完成)传递dirapi 变量和目录'src/out' ( dir 变量)和目录里面的'/api'(变量api)。 4) 如果 'src/out' 目录存在,则调用 createDir 函数,仅传递 api 变量以仅创建 'api' 目录(api 变量)
    • 变量:''dir = 'src/out''' 和 ''api = 'api1'''。我不知道我是否了解我想要实现的目标,但我无法从UtilsController 知道该目录是否存在。
    • 我对您上次的反馈感到非常困惑,并有一些问题:(1)您为什么要实现一些内置函数mkdir 已经提供的功能? (2) 你为什么一开始就使用一些没有任何功能的类? (3) 为什么在我的示例中const exists = await utilsController.utilsDir(); 行不返回您想知道目录是否存在的布尔值?
    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2012-02-10
    • 2017-01-17
    • 2016-10-27
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多