如何在Typescript中以其他名称重新导出枚举?

时间:2020-05-11 12:40:56

标签: typescript enums

我想在我的库中(在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;

但不幸的是,通天塔不接受。导致此错误:

import = {is not supported by @babel/plugin-transform-typescript Please consider using从'';`以及Typescript的--allowSyntheticDefaultImports选项导入。

默认导入在这里无济于事,所以我想知道该怎么做。

1 个答案:

答案 0 :(得分:2)

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

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;