无法从TypeScript中的模块/命名空间导出/导入类

时间:2017-09-12 14:32:56

标签: javascript typescript webpack

我正在玩TypeScript并导出/导入。

我只想拥有像C#这样的文件结构。我想嵌套一个helper-class whic只包含一些常量字符串属性。这就是文件~/Scripts/Helper/UrlHelper.ts的样子:

module Helper.UrlHelper {
    abstract class Controller {
        protected static readonly controllerName: string;
    }

    export abstract class Account extends Controller {
        static controllerName: string = "Account";

        static readonly loginGet: string = [Account.controllerName, "Login"].join("/");
        static readonly loginPost: string = [Account.controllerName, "Login"].join("/");
    }
}

我的目标是使用值,例如Helper.UrlHelper.Account.loginPost。但我没有让导入/导出工作。

我的最后一次尝试是添加export * from "./Helper/UrlHelper"并使用导入import {Account} from "../Helper/UrlHelper";

这会导致错误:

  

模块'“... / Scripts / Helper / UrlHelper”'没有导出的成员'帐户'

我几乎尝试了here的所有内容,但没有任何效果。我做错了什么?

2 个答案:

答案 0 :(得分:1)

请勿使用关键字module,只需导出您需要在其他位置导入的成员:

// Helper/UrlHelper.ts
abstract class Controller {
    protected static readonly controllerName: string;
}

export abstract class Account extends Controller {
    static controllerName: string = "Account";

    static readonly loginGet: string = [Account.controllerName, "Login"].join("/");
    static readonly loginPost: string = [Account.controllerName, "Login"].join("/");
}

然后,可以导入导出的成员Account

// other-directory/other-file.ts
import { Account } from "../Helper/UrlHelper"

modules 的文档在这里:

您也可以使用名称空间,但它不是ES6标准。如果您真的需要名称空间,请参阅以下文档:

另见:

答案 1 :(得分:0)

参考:https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html
建议你不要在模块中包装类,因为它可能会造成不必要的混乱 更好的选择是:

abstract class Controller { /* ... */ }
export abstract class Account extends Controller { /* ... */ }

这可以放在Helper中,按照建议命名文件UrlHelper.ts。
然后,当您要导入该类时,您可以:

import { Account } from "./Helper/UrlHelper";