gpt4 book ai didi

.net - ASP.NET 项目中 TypeScript 文件和代码的结构

转载 作者:搜寻专家 更新时间:2023-10-30 21:30:17 28 4
gpt4 key购买 nike

所以我正在研究这个 ASP.NET(.NET 4.6、VS2015),它的所有业务逻辑都是用 C# 编写的。但由于它不仅仅是演示网络,客户端也会有很多逻辑。所以我选择了 TypeScript,因为它看起来是一个很棒的工具,可以帮助我用我习惯的 C# 风格组织客户端代码。

但是,随着我越来越深入地研究,我发现 TypeScript 与 C# 完全不同。这一切都与一个问题有关:

TypeScript 不支持简单的类每个文件(或接口(interface)每个文件等)规则,您可以在另一个文件中简单地包含几个类(接口(interface)..)。

这真的会派上用场,因为我想为每个页面定义我的 ViewModel 类和初始化脚本,我会在其中使用所有这些模型和实用程序。

就我个人而言,我找到了两个“解决方案”

A:保持每个文件一个类的规则,并将每个文件包装在一个 namespace 中,如下所示:

// Analogy to c# using
import utils = App.Code.Utils;

namespace App.Code {
export class ZipCodeValidator {

public zipCode: string;

public validate(): boolean {
// I can use class from another
let stringValidator: utils.StringValidator = new utils.StringValidator();

// TODO validation
return true;
}
}
}

我从一开始就采用了这个解决方案,我对此非常满意。直到我发现有时编译文件的顺序是错误的。是的,我可以手动继续引用其他文件(或使用 _references.ts),但对我来说就像回到几年前一样。我将拥有大量文件(多亏了我的 class-per-file 规则)。

“他们还说”我可以通过命名空间生成 js 文件,这也是一个很大的优势,所以我可以创建文件 general.js、app.js 和 admin.js(你知道什么地方会用到什么)。

B:第二种解决方案是“正确”使用模块。据我了解,我可以这样写:

import { StringValidator } from "./Utils/StringValidator";

export default class ZipCodeValidator {
public zipCode: string;

public validate(): boolean {
// I can use class from another
let stringValidator: StringValidator = new StringValidator();

// TODO validation
return true;
}
}

但这意味着我需要手动导入每个类。尽管使用这种方法智能感知无法正常工作,但如果我省略“默认”关键字,我还需要手动指定每个类。另外,我不知道如何根据目录将源代码分成不同的 js 文件。

好吧,你可能会说我误解了 TypeScript。一切都与模块有关,对吗?但我不会满足于“您需要在一个模块中定义所有类”。那是不对的。那时我可以继续使用 JavaScript。

A 的问题:我需要手动跟踪所有文件并维护它们的正确顺序。

B 的问题:我需要按类导入所有类。解决方案是,如果我可以做类似

import * as utils from "./utils/"

但据我了解,这是不可能的。

总结

你能帮我推到正确的轨道吗?一些工具,也许一些插件或什么?我喜欢 TypeScript,我想使用它。这些天我只是拒绝做体力劳动。我希望这个问题能帮助像我这样的其他人。

谢谢

最佳答案

我的方法是使用方法 B 并使用模块。然后,我将所有通用模块收集到一个包装器模块中,在那里我重新导出它们以便于导入其他模块。

一个例子:

AllUtils.ts

export * from './UtilClass1';
export * from './UtilClass2';
export { UtilClass3 as SomethingElse } from './UtilClass3';

这将允许使用单个导入语句来导入所有类,如下所示:

import * as utils from './AllUtils';

let myUtil = new utils.UtilClass1();

Intellisense 使用这种方法在 VS2015 中为我工作。这样做的另一个好处是您可以在重新导出时省略或重命名某些类。您仍然需要将它们一一添加到包装文件中,但这只需完成一次。

关于.net - ASP.NET 项目中 TypeScript 文件和代码的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40907759/

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