【问题标题】:Nodejs, DTO, input types and return types of methodsNodejs、DTO、方法的输入类型和返回类型
【发布时间】:2018-09-30 20:58:58
【问题描述】:

如何才能尽可能接近 nodejs 中的以下 3 个功能?

// 1./ namespaces for types, so I don't need to have long type names
import foo.bar.Type1;
import foo.bar.Type2;
...

// 2./ strict complex types of method parameters
// 3./ strict complex type for return type
public function foo(Type1 param1, Type2 param2): Type3 {
    ...
}

这完全取决于在我们的项目中引入 DTO 的能力,如果没有它,这将变得非常混乱:(。

nodejs 处理 DTO 的行业标准是什么?

【问题讨论】:

    标签: node.js dto


    【解决方案1】:
    1. 将 JS 文件嵌套在目录中几乎是尽可能接近命名空间。

    如果你有类似的目录结构

    foo >
        bar >
            Type1.js
            Type2.js
    

    然后可以用以下方式导入:

    const Type1 = require('./foo/bar/Type1');
    const Type2 = require('./foo/bar/Type2');
    
    1. Node 是一种松散类型的语言,因此如果您确实需要全面严格的类型,那么您可能应该考虑其他语言选项。如果您只是在特定情况下需要它,您可以使用 typeof 运算符来确定传递给函数的类型并拒绝不满足类型要求的调用。

    例子:

    function test(someString, someNum, someObject) {
        if ( typeof someString != 'string' ||
             typeof someNum != 'number' ||
             typeof someObject != 'object' )
        { return false; }
    
        // Execute function
        return true;
    }
    
    1. Node 中没有本地方法来强制特定函数的返回类型(同样,如果您明确需要这种行为,那么您可能需要考虑使用严格类型的语言)。虽然有“linting”工具,但您可以使用它们来定义返回值的类型(也适用于参数,因此这也适用于问题 2)。这些工具可以设置为与项目的测试一起运行,它们将拒绝不满足指定返回值的函数。 ESLint 是一个受欢迎的选项。这不应与本机功能混淆,因为它要求您在每个功能上方包含特殊格式的 cmets 才能工作。

    【讨论】:

    • 感谢您的回答!我肯定会检查 ESlint。对于静态分析和类型强制,我最后可能会使用 TypeScript 或 Flow。
    猜你喜欢
    • 2019-10-29
    • 2018-12-03
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多