多个文件上的Typescript名称空间

时间:2018-12-13 09:06:42

标签: javascript typescript

我做了如下的事情:

namespace omid{
  let version='1.0';
  function boot(){ /*some code*/ };
  class cookie{
    //
  }
}

现在,我想将cookie类移动到另一个文件中,并将路径指向我的命名空间omid内部。反正有这样做吗?


我已经尝试过了:

omid.ts:

namespace omid{
  let version='1.0';
  function boot(){ /*some code*/ };
}

cookie.ts:

namespace omid{
  export class cookie{
     //
  }
}

tsconfig.json:

{
  "compilerOptions": {
    "module"   : "commonjs",
    "target"   : "es5",
    "sourceMap": true,
    "outFile"  : "dist/omid.js"
  },
  "files"          : [
    "src/omid.ts",
    "src/libs/cookie.ts"
  ],
  "exclude"        : [
    "node_modules"
  ]
}

输出:

var omid;
(function (omid) {
    var version = '1.0';
        function boot() {
        }
    }
})(omid || (omid = {}));
var omid;
(function (omid) {
    var cookie = /** @class */ (function () {
        function cookie() {
            alert("aaa");
        }
        return cookie;
    }());
    omid.cookie = cookie;
})(omid || (omid = {}));

2 个答案:

答案 0 :(得分:0)

通过将调用放入构造函数或其他Cookie类方法中,可以从Cookie类调用boot()

namespace omid {
  let version='1.0'
  export function boot() { 
    console.log("booting...")
  }
}

namespace omid {
  export class Cookie{
      constructor() {
          boot()
      }
  }
}

let test = new omid.Cookie()

更新

由于无法为CommonJS使用"module" : "commonjs"选项,因此必须从tsconfig中删除outFile

omid_namespace_png

答案 1 :(得分:0)

Typescript名称空间是在es6模块成为标准之前发明的。从那时起,名称空间也许还没有被弃用,但是它们的使用却在减少,以支持模块。因此,很少有人可以向您咨询名称空间,而我不是其中之一。

但是如果允许您将代码重写为模块,那么一切都非常简单:

cookie.ts:

export class Cookie { /*...*/ }

omid.ts:

import { Cookie } from './cookie'
export let version='1.0';
export function boot(){ /*some code*/ };
export {Cookie}

anywhere.ts:

import {Cookie} from './omid'