- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
直到现在,我一直在使用 typescript 内部模块,并包含 10 多个脚本标签来引导我的应用程序。我目前正在将项目转换为使用外部模块(使用 browserify),但我仍然不知道应该如何转换枚举。
我曾经有过这样的东西:
mymodule.submodule {
enum MyEnum {
one,
two,
three
}
}
我会在其他模块中使用它:
var val:mymodule.submodule.MyEnum = mymodule.submodule.MyEnum.one;
并且正确编译为 js。将项目转换为使用外部模块后,我将所有接口(interface)移动到 *.d.ts 文件中,并考虑将枚举也放在那里,但这当然会产生错误,因为在 js 中没有枚举和数字之间的映射.然后我将枚举移动到 *.ts 文件,以便它们被编译。问题是如果我把它们写成:
export enum MyEnum{
one,
two,
three
}
export enum OtherEnum {
four,
five,
six
}
这适用于在我的代码中要求枚举:
import Enums = require('./enums');
var val = Enums.MyEnum.one; //this works
var val1: mymodule.submodule.MyEnum = Enums.MyEnum.one; //ERROR: incompatible types
BUT 与 mymodule.submodule.MyEnum
类型不兼容。那么我怎样才能既有枚举类型的声明,这样我就可以在 d.ts 文件中声明变量类型,又要依赖实际生成的枚举代码(以便正确加载)并在 .ts 文件中使用?
注意:这些枚举在许多模块中使用,因此将它们包含在它们使用的同一文件中并不是解决方案。
更新 关于接口(interface)声明:可能不清楚为什么我将原始枚举声明保留在 d.ts 文件中,所以我添加了一个示例。
在 interfaces.d.ts 我目前有:
declare module mymodule.submodule {
enum MyEnum{
one,
two,
three
}
interface ISomething{
aValue: MyEnum;
aFunction: (anArg: MyEnum) => void;
}
}
据我所知,我不能在 .d.ts 文件中使用 import 语句,所以如何在所有情况下都使用一个枚举声明?
最佳答案
枚举需要在 TS 文件中,因为枚举被编译为 JavaScript。使用模块时,需要导入枚举才能使用(即使只是用于定义变量的类型)。
将代码更改为以下内容:
import Enums = require('./enums');
var val1: Enums.MyEnum = Enums.MyEnum.one; // no error
此外,如果枚举是在 enums.ts
中定义的,则它们不应位于 mymodule.submodule
中。从定义文件中删除它们。
关于更新
要让枚举与接口(interface)一起工作,您可以将接口(interface)移出声明文件 (interfaces.d.ts
) 并从 typescript 文件中导出它们(例如 接口(interface).ts
):
import Enums = require('./enums');
export interface ISomething {
aValue: Enums.MyEnum;
aFunction: (anArg: Enums.MyEnum) => void;
}
然后你可以像这样使用接口(interface):
import Interfaces = require('./interfaces');
import Enums = require('./enums');
var example: Interfaces.ISomething = {
aValue: Enums.MyEnum.one,
aFunction: (example: Enums.MyEnum) => { console.log('example'); }
};
关于 typescript 枚举和外部模块(browserify),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31007312/
我有 带有插件系统的软件包。每个插件都是一个包 可以通过调用 use 方法来加载插件。并将插件导出作为参数传递: package = require('thePackage').use( requir
我知道 browserify 可以通过转换来使用 UMD 模块,但是当我想使用 browserify 构建一个库时,我该如何构建一个 UMD 模块?我可以使用任何转换吗? 最佳答案 如果您想使用 br
我有 third-party-module-b使用 third_party_module_a全局并拥有 require('third-party-module-a'); 在入口点。 问题是third-
我正在使用 Browserify 和 Grunt 来捆绑我们的 RendrJS webapp。我想分析这个包,看看它包含哪些模块,看看是否有多余的代码。这可能会发生,因为在 Rendr 中,一些 js
在 browserify 手册中,exclude part ,它给出了一个使用排除的例子: $ npm install jquery $ browserify -r jquery --standalo
在我的前端代码中,我使用 require()引入依赖于不同版本的 Underscore.js 的库。结果,当我使用 browserify 将所有内容捆绑在一起时,输出包含多个 Underscore 副
我正在使用 SpineJS(它导出一个 commonjs 模块),它需要在全局范围内可用,因为我在任何地方都使用它,但似乎我必须这样做 Spine = require('spine')在每个使用 Sp
假设我有一个模块,其源代码不是 ECMA 5(例如,它是 Coffescript 或 Typescript 或其他),并且以带有源映射的编译形式分发。如何将此源映射包含在 Browserify 包中?
我想创建一个独立的 browserify 包,它将导出的对象直接附加到 window 对象,而不是嵌套在附加到 window 的包装器对象下。 这样做,browserify 会忽略窗口: browse
当您将代码与 Browserify 捆绑在一起时,您使用的每个模 block 都内联在结果输出中,并标有其本地文件路径。因此,您可以在捆绑代码中看到文件路径字符串。 但理论上,这些字符串都可以重写为“
我需要将一些模块强制放入我的包中,因为它们是通过如下代码动态需要的: var moduleName = "someModule"; var myModule = require(moduleName)
我正在尝试通过使用 browserify-shim 将某些模块从包中填充出来来重构使用 Browserify 的库。具体来说,该库使用 require("codemirror") 但我想提供一个不包含
我在新项目中使用了 browserify。到目前为止,它运行得非常好。 不过我有一个大问题。如何分别调试每个 js 文件。它将所有文件捆绑在一起,并在发生错误时指向捆绑。 我正在使用 chrome 和
来自 watchify 的文档, 我懂了: When creating the browserify instance b you MUST set these properties in the c
使用 browserify,我试图要求一个已经浏览器化的模块,但是包无法解析已经浏览器化的模块。 例如,我有一个文件 bundle-1.js 已与命令捆绑在一起: browserify -r ./bu
关于 external requires 的 Browserify 文档部分展示如何使包中的模块可用于全局环境: browserify -r through -r duplexer -r ./my-f
现在,gulp-browserify is no longer supported我正在寻找一个简单的教程,如何现在使用带有 gulp 的 browserify。 This似乎是一种选择,但它仍然相当
我是 Nodejs 和 browserify 的新手。我从这个开始link . 我有文件 main.js,其中包含此代码 var unique = require('uniq'); var data
我最近从 Grunt 过渡到 Gulp。但是我还是个新手,谁能告诉我使用 Gulp-Browserify 和只使用 Browserify 之间的区别是什么? 我知道 Gulp-Browserify 现
描述:我有 package.json 和 bower.json 用于处理我当前架构中的依赖项。我应该在哪个文件中添加 “jquery.slider(版本 1.1.0)”以及怎么做? 目前,我已经在 b
我是一名优秀的程序员,十分优秀!