Файл TS, сгенерированный Typewriter, не является модулем - PullRequest
1 голос
/ 08 марта 2019

Я использовал расширение «Пишущая машинка» в Visual Studio для генерации модели (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];]
    }]
}

Autogenerated Account.ts

module InvWebOps.EFModels.TypewriterTSTFiles {

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


    export class Account {

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

1 Ответ

1 голос
/ 09 марта 2019

Краткий ответ

Вы можете получить доступ к классу 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 устарело в пользу namespace.Оба ключевых слова означают одно и то же, но второе не так запутанно.Официальные документы TypeScript говорят это о пространствах имен:

Пространства имен - это просто имена объектов JavaScript в глобальном пространстве имен.Это делает пространства имен очень простой в использовании конструкцией.Они могут занимать несколько файлов ... [и] ... может быть хорошим способом структурировать ваш код в веб-приложении ...

Сгенерированный код Account делает две вещи:

  1. Добавляет пространство имен InvWebOps.EFModels.TypewriterTSTFiles в глобальную область.
  2. Экспортирует класс Account из этого пространства имен.

Все, что экспортируется изпространство имен доступно только из этого пространства имен.Таким образом, всякий раз, когда строка кода должна обращаться к классу Account, строка кода должна использовать пространство имен класса Account.Краткий ответ показывает три способа сделать это.

...