Typescript枚举,用于实现和接口

Jør*_*edt 7 enums typescript

我在CommandEnum.ts中有以下内容:

export enum CommandEnum {
    createProject,
    renameProject,
    hablaBabla
}
Run Code Online (Sandbox Code Playgroud)

在我能够从实现代码中引用的模块中,使用

import {CommandEnum} from '../server/contracts/CommandEnum'

let x = CommmandEnum.hablaBabla
Run Code Online (Sandbox Code Playgroud)

在CommandEnum.js中,枚举文件被编译为带导出逻辑的javascript函数.

这现在工作正常,但我想在我的界面中引用此枚举,我尝试:

/// <reference path="../contracts/CommandEnum.ts" />
namespace ValueTypes {

    export interface Command {
        type : CommandEnum;
        referenceId : string;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,这个引用不会导入CommandEnum类型,但我尝试过的一些其他模块/命名空间/导出组合. 我可以使用参考语法,但不是模块语法,反之亦然 - 但不是两者兼而有之.

这有可能吗?使用纯定义接口文件中的枚举似乎是一种非常常见的场景.但是当实现接口时,枚举必须以"函数形式"提供,并且这两个模型似乎没有结合?

我有类同样的问题,我想命名,.Net风格 - 我不得不放弃.但是,我的接口中没有引用类 - 枚举是.

我使用node.js并编译为单个文件,而不是单个连接的输出.

bas*_*rat 3

现在工作正常,但我也想在我的界面中引用这个枚举

您可以将内容从 a 移动module到全局命名空间 usedeclare global

例如myEnumGlobalDeclare.ts

import {MyEnum as MyEnumModule} from "./myEnum";
declare global {
   declare var MyEnum: typeof MyEnumModule;
}
Run Code Online (Sandbox Code Playgroud)

例如myEnumGlobalDefine.ts

import {MyEnum as MyEnumModule} from "./myEnum";
MyEnum = MyEnumModule;
Run Code Online (Sandbox Code Playgroud)

或者类似的东西^。当然,这意味着你的运行时应该支持全局增强,例如在你需要使用的nodejsglobals和浏览器中window

更多的

我绝对不建议走这条路。相反,创建一个全局types.ts模块并在任何地方使用它。例如alm有这个文件:https://github.com/alm-tools/alm/blob/master/src/common/types.ts