在 Typescript 中导入外部依赖

Importing external dependencies in Typescript

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

我的配置文件代码如下

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

module.exports = config;

我正在导入订单文件中的配置文件如下

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

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

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

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

这里的主要部分是您想导出您的对象实例。你在正确的轨道上,但可能有更简单的方法。

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

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

注意 class 之前的 export。这同样适用于接口、枚举等。通过以这种方式导出,您可以导入并初始化它:

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

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

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

现在,我假设您只想在全局范围内访问这些属性。甚至可能 static/readonly,因此您不必每次都初始化 class。利用 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 和模块等术语以及它们与导入的关系。

希望对您有所帮助!

您可以通过 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';

注意:此处必须给出导出模块的确切名称。

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

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