Typewriter生成的TS文件不是模块

时间:2019-03-08 18:00:54

标签: c# typescript typewriter

我在Visual Studio中使用Typewriter扩展来生成模型(Account.ts),但是当我尝试在另一个类中导入模型时,它将失败。我在做什么错了?

import { Account } from '../../models/greencard/Account';

错误

'C:/Users/me/Desktop/_REPOS/stuff/ClientApp/src/app/models/greencard/Account.ts' is not a module.   

打字机文件

${
    // Enable extension methods by adding using Typewriter.Extensions.*
    using Typewriter.Extensions.Types;

    // Uncomment the constructor to change template settings.
    //Template(Settings settings)
    //{
    //    settings.IncludeProject("Project.Name");
    //    settings.OutputExtension = ".tsx";
    //}

    // Custom extension methods can be used in the template by adding a $ prefix e.g. $LoudName
    string LoudName(Property property)
    {
        return property.Name.ToUpperInvariant();
    }
}
module InvWebOps.EFModels.TypewriterTSTFiles {

templates e.g. $Properties[public $name: $Type][, ]

    // More info: http://frhagn.github.io/Typewriter/

$Classes(Account)[
    export class $Name {
        $Properties[
        // $LoudName
        public $name: $Type = $Type[$Default];]
    }]
}

自动生成的Account.ts

module InvWebOps.EFModels.TypewriterTSTFiles {

    // More info: http://frhagn.github.io/Typewriter/


    export class Account {

        // ID
        public id: number = 0;
     ......

1 个答案:

答案 0 :(得分:1)

简短回答

您可以通过using its namespace访问其他文件中的Account类。

namespace InvWebOps.EFModels.TypewriterTSTFiles {
    const account = new Account();
}

// the deprecated `module` keyword also works
module InvWebOps.EFModels.TypewriterTSTFiles {
    const account = new Account();
}

// a fully qualified name also works
const account = new InvWebOps.EFModels.TypewriterTSTFiles.Account();

更多详细信息

  

我在做什么错了?

关键字module has been deprecated in favor of namespace。这两个关键字含义相同,但是第二个关键字不那么令人困惑。官方TypeScript文档对命名空间说了这句话:

  

命名空间在全局命名空间中只是简单地命名为JavaScript对象。这使名称空间成为非常简单的构造。它们可以跨越多个文件... [和] ...是在Web应用程序中构建代码的好方法...

生成的Account代码有两件事:

  1. InvWebOps.EFModels.TypewriterTSTFiles命名空间添加到全局范围。
  2. 从该命名空间导出Account类。

从名称空间导出的所有内容只能在该名称空间内访问。因此,每当一行代码需要访问Account类时,该行代码就需要使用Account类的命名空间。简短的答案显示了三种实现方法。