代码之家  ›  专栏  ›  技术社区  ›  Mike Lischke

如何在Typescript中以不同的名称重新导出枚举?

  •  0
  • Mike Lischke  · 技术社区  · 4 年前

    我想在我的库(在React应用程序中)中为另一个库(在本例中为monaco编辑器)的导出成员提供一个更简单的接口。为此,我创建了一个index.ts文件,该文件确实会重新导出多种类型,我在其中删除了一个内部命名空间。这工作得很好:

    import { languages } from "monaco-editor/esm/vs/editor/editor.api";
    
    export type FoldingRange = languages.FoldingRange;
    export type FoldingContext = languages.FoldingContext;
    export type FoldingRangeKind = languages.FoldingRangeKind;
    

    除了最后一行,因为 FoldingRangeKind 是一个枚举。我不能用 export enum 这里需要一个完整的枚举定义。

    另一种选择是:

    export import FoldingRangeKind = languages.FoldingRangeKind;

    但不幸的是,巴贝尔没有接受这一点。这会导致此错误:

    进口= is not supported by @babel/plugin-transform-typescript Please consider using 从“”导入旁边是Typescript的--allowSyntheticDefaultImports选项。

    默认导入在这里没有帮助,所以我想知道该怎么办。

    0 回复  |  直到 4 年前
        1
  •  3
  •   Akxe    4 年前

    枚举不是类型,而是对象。它的值也是值,因此您需要将它们分配给常量。

    enum languages {
        FoldingRange,
        FoldingContext,
        FoldingRangeKind
    }
    
    export const FoldingRange = languages.FoldingRange;
    export const FoldingContext = languages.FoldingContext;
    export const FoldingRangeKind = languages.FoldingRangeKind;
    
    interface iLanguages {
        FoldingRange: 0,
        FoldingContext: 1,
    }
    
    export type FoldingRange = iLanguages["FoldingRange"];
    export type FoldingContext = iLanguages["FoldingContext"];
    export type FoldingRangeKind = languages.FoldingRangeKind;
    

    这是随后编译的内容( playground ). 希望这能为你解决问题。

    var languages;
    (function (languages) {
        languages[languages["FoldingRange"] = 0] = "FoldingRange";
        languages[languages["FoldingContext"] = 1] = "FoldingContext";
        languages[languages["FoldingRangeKind"] = 2] = "FoldingRangeKind";
    })(languages || (languages = {}));
    
    export const FoldingRange = languages.FoldingRange;
    export const FoldingContext = languages.FoldingContext;
    export const FoldingRangeKind = languages.FoldingRangeKind;