【问题标题】:Export class as Node.js module in TypeScript在 TypeScript 中将类导出为 Node.js 模块
【发布时间】:2021-07-04 23:43:44
【问题描述】:

我熟悉 TypeScript 中的 export 关键字,以及使用 TypeScript 从 Node 模块导出内容的两种规范方法(当然,也可以使用 TypeScript 模块,但它们离我更远)米找):

export class ClassName { }

还有一系列

export function functionName () { }

但是,我通常编写模块的方式是:

var ClassName = function () { };
ClassName.prototype.functionName = function () { };
module.exports = ClassName;

有没有办法使用 TypeScript 导出语法来做到这一点?

【问题讨论】:

    标签: javascript node.js typescript amd


    【解决方案1】:

    你可以在 TypeScript 0.9.0 中非常简单地做到这一点:

    class ClassName { 
        functionName () { }
    }
    
    export = ClassName;
    

    【讨论】:

    • 从类定义中删除export,它可以完美运行。谢谢:)
    • @BraedenP 是的,抱歉,忘记了 :)
    • 该死,我怎么这么笨。我在 node 上使用 AMD 模块有一段时间了:facepalm:
    【解决方案2】:

    这是我使用 TypeScript 导出 CommonJS (Node.js) 模块的方法:

    src/ts/user/User.ts

    export default class User {
      constructor(private name: string = 'John Doe',
                  private age: number = 99) {
      }
    }
    

    src/ts/index.ts

    import User from "./user/User";
    
    export = {
      user: {
        User: User,
      }
    }
    

    tsconfig.json

    {
      "compilerOptions": {
        "declaration": true,
        "lib": ["ES6"],
        "module": "CommonJS",
        "moduleResolution": "node",
        "noEmitOnError": true,
        "noImplicitAny": true,
        "noImplicitReturns": true,
        "outDir": "dist/commonjs",
        "removeComments": true,
        "rootDir": "src/ts",
        "sourceMap": true,
        "target": "ES6"
      },
      "exclude": [
        "bower_components",
        "dist/commonjs",
        "node_modules"
      ]
    }
    

    dist/commonjs/index.js(编译模块入口点)

    "use strict";
    const User_1 = require("./user/User");
    module.exports = {
        user: {
            User: User_1.default,
        }
    };
    //# sourceMappingURL=index.js.map
    

    dist/commonjs/user/User.js(编译用户类)

    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    class User {
        constructor(name = 'John Doe', age = 72) {
            this.name = name;
            this.age = age;
        }
    }
    exports.default = User;
    //# sourceMappingURL=User.js.map
    

    测试代码(test.js)

    const MyModule = require('./dist/commonjs/index');
    const homer = new MyModule.user.User('Homer Simpson', 61);
    console.log(`${homer.name} is ${homer.age} years old.`); // "Homer Simpson is 61 years old."
    

    【讨论】:

      猜你喜欢
      • 2016-12-06
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 2020-04-21
      • 1970-01-01
      相关资源
      最近更新 更多