gpt4 book ai didi

javascript - TypeScript 组织 : namespaces? 模块?困惑

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:41 25 4
gpt4 key购买 nike

我是 TypeScript 的新手,我对模块和命名空间的了解越多,我就越感到困惑。我应该使用模块吗?我应该使用 namespace 吗?我应该同时使用两者吗?帮助!

我有现有的 javascript (.js) 文件,我正在尝试将其转换为 TypeScript。有一个包含一些通用功能的 .js 文件和一个包含一些特定于过滤器的功能的 .js 文件。

现在我想用 TypeScript 对此进行更多组织,就像我通常使用 C# 所做的那样。

这是正确的用法还是应该如何组织?

我没有使用模块,对吗? (如何?)

Company.ts

namespace Company {

// nothing yet, but in future it might.

}

Company.Project.ts

namespace Company.Project {

import Company; // like this?

let myVar : string = "something";

export function handyGeneralFunction1(foo, bar) {
// ...
}

export function handyGeneralFunction2(foo, bar, foo, bar) {
// ...
doInternalCalc();
// ...
}

export function handyGeneralFunction3() {
// ...
}

function doInternalCalc() {
// ...
}
}

Company.Project.Filter.ts

namespace Company.Project.Filter {

import Project = Company.Project; // like this?

export function initializeFilter() {
// ...
initMetadata();
// ...
}

function initMetadata() {
// ...
Project.handyGeneralFunction3();

let helper : FilterHelper = new FilterHelper("aaaa,bbbb");
let res:string[] = helper.parseData();
}

function foo() {
// ...
let x :string = Project.myVar + " else"; // can I use myVar here?
}

// a class in the namespace
export class FilterHelper {

data: string;

constructor(theData: string) {
this.data = theData;
}

parseData() : string[] {
// ...
return new Array<string>();
}
}

}

最佳答案

如果你有可能真正改进项目结构,你绝对应该使用模块而不是命名空间。根据项目的大小,这可能需要一些努力。

如果您的应用不是那么大并且您不想投资切换到可以处理实际模块的不同构建系统,那么引入命名空间可能会有用。使用 namespace 只不过是一些包含函数和变量的命名全局变量。由于您没有任何适当的依赖结构,这很快就会变得困惑。您需要注意以正确的顺序导入所有文件,以便命名空间正常工作。您甚至可以省略您使用的导入语法,因为您无论如何只引用另一个需要在那个时间点初始化的全局对象。

因此,如果您无法对代码库进行任何较大的更改,命名空间可能是您的第一步。对于面向 future 的设置,我肯定会建议使用真正的模块。但请注意,这不是免费的。

有关更多信息,我建议在 https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html 上查看对此的官方评论。或位于 https://basarat.gitbooks.io/typescript/content/docs/project/namespaces.html 的 TypeScript Deep Dive 部分

关于javascript - TypeScript 组织 : namespaces? 模块?困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40781333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com