在Typescript中导入外部依赖项

时间:2017-08-23 09:34:23

标签: javascript node.js typescript dependencies export

我是打字稿/节点的新手。我有一个打字稿文件" order.ts"我希望从" config.ts"

导入外部配置依赖项

我的配置文件代码如下

let config = {
    mongoAddress: "mongodb://localhost:27017/dts",
    dataDirectory: "../../data/"
};

module.exports = config;

我正在订单文件中导入配置文件,如下所示

import { config  } from "../../config";

但是我让TS编译器抛出错误" ...文件不是模块"。我应该如何在typescript中导入我的外部依赖

enter image description here

3 个答案:

答案 0 :(得分:2)

此处的主要部分是您要导出对象实例。你已经走上了正确的道路,但对你来说可能更容易。

在这种情况下,比如将它包装在类中并导出:

export class Config {
    mongoAddress = 'mongodb://localhost:27017/dts';
    dataDirectory = '../../data/';
}

在课前注意export。同样可以应用于接口,枚举等。通过这种方式导出它,然后您可以导入它并初始化它:

import { Config } from '../config';

var c = new Config();
console.log(c.mongoAddress);

这不会使它成为变量,就像在原始示例中一样,但是您只需将其包装在一个类中。这也是您必须首先使用new Config()初始化它的原因。

现在,我假设您希望这些属性只是全局访问。甚至可能是静态/只读,因此您不必每次都要初始化课程。利用TypeScript的静态类型,在这种情况下,样本可以更好地重构为:

export class Config {
    public static readonly mongoAddress: string = 'mongodb://localhost:27017/dts';
    public static readonly dataDirectory: string = '../../data/';
}

有了这个,调用它就更不突兀 - 而且非常安全:

console.log(Config.mongoAddress);
console.log(Config.dataDirectory);

现在以这种方式导出只是其中一个选项。它实际上完全取决于整个应用程序中的library structure you're using(或者来自第三方的库)。这有点干读,但我建议您查看不同的结构,以熟悉UMD和模块等术语以及它们与导入的关系。

希望这有帮助!

答案 1 :(得分:1)

您可以通过两种方式进行导入和导出。

1)默认导出

// config.ts
export const config = {
    mongoAddress: "mongodb://localhost:27017/dts",
    dataDirectory: "../../data/"
};
export default config;

// your other file

import configs from './config';

注意:您可以在此处为导入的模块指定任何名称;

2)导入时具有确切声明名称的正常导出。

// config.ts
export const config = {
    mongoAddress: "mongodb://localhost:27017/dts",
    dataDirectory: "../../data/"
};

// your other file
import { config  } from './config';

注意:您必须在此处提供导出模块的确切名称。

导出配置时要遵循的最佳做法。

在代码中创建一个带静态变量的静态类。这可能意味着这些配置是固定的东西。

答案 2 :(得分:0)

module.exports是导出模块的节点语法。 Typescript有一个关键字名称export,所以你可以使用它:

export const config = {
    mongoAddress: "mongodb://localhost:27017/dts",
    dataDirectory: "../../data/"
};