在ASP.NET项目中的打字稿文件和代码的结构



因此,我正在研究此ASP.NET(.NET 4.6,VS2015),该(.NET 4.6,VS2015)都在C#中写下所有业务逻辑。但是,由于它不仅是演示网络,因此客户端也将有很多逻辑。因此,我拿了打字稿,因为它看起来像是一个很棒的工具,它将帮助我使用C#中的风格来组织我的客户端代码。

但是,随着我的潜水越来越深,我看到Typescript与C#完全不同。这一切都与一个问题有关:

typeScript不支持简单的每个class-class-file(或每个接口。P>

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

个人,我找到了两个"解决方案"

a:保留每个档案规则并在这样的命名空间中包裹每个规则:

// 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),但对我来说就像回去几年一样。我将拥有文件的hunderts(这要归功于我的每篇文档规则)。

也"他们说"我可以通过名称空间生成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;
    }
}

,但这意味着我需要导入每个类手动。尽管Intellisense使用此方法无法正常工作,但如果我省略了"默认"关键字,我还需要指定每个类手动。另外,我不知道如何基于目录将源分离为不同的JS文件的任何适当性。

好吧,您可能会说我误解了打字稿。这都是关于模块的,对吗?但是我不会与"您需要在一个模块中定义所有课程"。那是不对的。然后我可以呆在javascript中。

a:我需要手动跟踪所有文件并保持其正确的订单。

B的问题:我需要按课堂导入所有课程。解决方案是我可以做

之类的事情
import * as utils from "./utils/"

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

摘要

您能给我推动正确的轨道吗?一些工具,也许是一些插件或其他任何工具?我喜欢打字稿,我想使用它。这些天我只是拒绝做手动工作。我希望这个问题能帮助像我这样的其他人。

谢谢

我这样做的方式是使用方法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中使用此方法对我有用。这是您可以在重新出口中省略或重命名某些类的额外好处。您仍然必须一个一个一个一个添加到包装纸文件中,但这只需要做一次。

最新更新