【问题标题】:How to re-export the child namespace in TypeScript?如何在 TypeScript 中重新导出子命名空间?
【发布时间】:2022-08-18 12:21:41
【问题描述】:

我想重新导出嵌套命名空间HTML_Validator.Localization,但避免 整体出口HTML_Validator,meged实体。

class HTML_Validator {
    // ...
}


namespace HTML_Validator {

    export namespace Localization {

        export type FileIsEmptyWarningLog = Readonly<Pick<WarningLog, \"title\" | \"description\">>;

    export namespace FileIsEmptyWarningLog {
      export type NamedParameters = Readonly<{ targetFileRelativePath: string; }>;
    }

    }

}


export default HTML_Validator;

其他包需要重新导出,但HTML_Validator班级 他们不需要 - 我需要导出子命名空间本土化只要。

下面的代码无效,但表达了我想要做的事情。

import HTML_Validator from \"PATH/TO/HTML_Validator\";
import HTML_ValidatorLocalization = HTML_Validator.Localization;

export HTML_ValidatorLocalization; // invalid: Cannot use namespace \'HTML_ValidatorLocalization\' as a value.

    标签: typescript namespaces


    【解决方案1】:

    注意:您确定import HTML_ValidatorLocalization = HTML_Validator.Localization; 是有效代码吗?对我来说似乎很可疑。

    只需将其导出为变量(?):

    import HTML_Validator from "PATH/TO/HTML_Validator";
    export const HTML_ValidatorLocalization = HTML_Validator.Localization;
    

    【讨论】:

    • 谢谢你的回答! “你确定吗 ... ?” - 是的。 “只需将其导出为变量” - 不幸的是,这样我们会得到TS2551: Property 'Localization' does not exist on type 'typeof HTML_Validator'.。我的意思是 TypeScript 并不期望我们会以这种方式导出命名空间。
    【解决方案2】:

    是否可以选择取消嵌套命名空间?换句话说,在一个单独的文件中创建一个HTML_Validator_Localization 命名空间,然后从两个现有的源文件中导入它?

    如果不是,我可以让 typescript 编译器接受的唯一变体是将export HTML_ValidatorLocalization; 替换为export default HTML_ValidatorLocalization;,但这可能不适用于您的情况。

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 2021-02-26
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多