繁体   English   中英

在Typescript中导入外部依赖项

[英]Importing external dependencies in Typescript

我是打字稿/节点的新手。 我有一个打字稿文件“ order.ts”,我想从中导入“ config.ts”的外部配置依赖项

我的配置文件代码如下

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

module.exports = config;

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

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

但是,我得到TS编译器抛出错误“ ...文件不是模块”。 任何线索我应该如何在打字稿中导入我的外部依赖关系

在此处输入图片说明

这里的主要部分是您要导出对象实例。 您正朝着正确的方向前进,但可能会有更简单的方法。

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

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);

现在,以这种方式导出只是其中一种选择。 实际上,这完全取决于您在整个应用程序中所使用库结构 (或者,取决于第三方库)。 读起来有些枯燥,但是我建议您看一下熟悉UMD和模块等术语的不同结构,以及它们与导入的关系。

希望这可以帮助!

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

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';

注意:在这里,您必须提供所导出模块的确切名称。

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

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

module.exports是导出模块的节点语法。 Typescript具有关键字名称export因此您可以使用以下命令:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM