我在CommandEnum.ts中有以下内容:
export enum CommandEnum {
createProject,
renameProject,
hablaBabla
}
在一个模块中,我可以使用
从实现代码中引用import {CommandEnum} from '../server/contracts/CommandEnum'
let x = CommmandEnum.hablaBabla
在CommandEnum.js中将枚举文件编译为带导出逻辑的javascript函数。
这现在工作正常,但我想在我的界面中引用这个枚举,我尝试:
/// <reference path="../contracts/CommandEnum.ts" />
namespace ValueTypes {
export interface Command {
type : CommandEnum;
referenceId : string;
}
}
现在,这个引用不会导入CommandEnum类型,但是我尝试过一些其他的modules / namespace / export组合。 我可以使用参考语法,但不能使用模块语法,反之亦然 - 但不能同时使用。
这实际上可行吗?使用纯定义接口文件中的枚举似乎是一种非常常见的场景。但是当实现接口时,枚举必须以“函数形式”提供,并且这两个模型似乎不能合并?
我遇到了类的问题,我想要命名空间,.Net风格 - 我不得不放弃。但是,我的接口中没有引用类 - 枚举是。
我使用node.js并编译为单个文件,而不是单个的连接输出。
答案 0 :(得分:3)
这现在工作正常,但我想在我的界面中引用这个枚举
您可以将module
中的内容移动到全局命名空间使用declare global
E.g。 myEnumGlobalDeclare.ts
import {MyEnum as MyEnumModule} from "./myEnum";
declare global {
declare var MyEnum: typeof MyEnumModule;
}
E.g。 myEnumGlobalDefine.ts
import {MyEnum as MyEnumModule} from "./myEnum";
MyEnum = MyEnumModule;
或类似的东西^。当然,这意味着您的运行时应该支持全局扩充,例如在nodejs中,您需要使用globals
和浏览器window
。
我绝对不建议走这条路。而是创建一个全局types.ts
模块,并在任何地方使用它。例如。 alm有这个文件:https://github.com/alm-tools/alm/blob/master/src/common/types.ts