所以我是一名C ++程序员,他在Dart中制作了一些东西,现在正在转换为Typescript。我一次解决一个问题,现在单个文件已经开始出现了。当试图找到关于这个问题的信息时,我很蠢,有很多包含文件的方法,每个方法都非常冗长。事实上,整个主题仍处于前沿并处于积极发展之中。
所以我没有使用任何外部库,所以内部模块会这样做。但是,当我尝试初始化一个全局变量时,如果在同一模块名称下的另一个打字稿文件中定义了类,则会出现以下错误:
0x800a01bd - JavaScript运行时错误:对象不支持此操作
在StackOverflow上查看时,我可以找到完全相同的场景: Spanning one Typescript module across files gives 0x800a01bd - JavaScript runtime error: Object doesn't support this action
但是,我是否相信我应该按照这样的顺序将每个.js文件输入到html中以便一切都可以解决?当然这可能不正确,为什么visual studio不能为我解决订单并吐出一个.js文件?
我已经尝试将Typescript构建设置为合并为单个.js文件,并在我的html中引用该文件。这实际上只运行一次,之后每次都失败了。 (缓存?)显然我必须遗漏一些东西,所以我想请求你的帮助。
在Dart中,这非常简单,但在打字稿中,这非常令人困惑和麻烦。 AMD,UMD,tsconfig.json等......作为一个C ++人,我喜欢命名空间并包含指令,最重要的是它们很简单,只需提供你需要的所有功能。
那么最相关,最新的处理方式是什么?我在这里缺少什么?
答案 0 :(得分:0)
因此,在使用多个文件时,您必须按照所有内容都将解决的顺序将它们提供给HTML。 (请不要......)
将JavaScript输出组合到一个文件中时,请确保选择ECMAScript 5,而不是ECMAScript 6,因为它会崩溃并刻录。
同时删除组合的Javascript文件,以便生成新的文件。您可能还想进行一些清理,因为VS2015不会删除任何.js&你的.js.map文件,所以你的目录可能会被无用的文件弄乱。
<强> /更新强>
每次构建时都需要删除生成的组合Javascript文件,否则不会更新......
答案 1 :(得分:0)
我不使用Visual Studio 2015,但我将描述一种直接的方法来设置将使用tsc
编译的命名空间单文件TypeScript项目。
在项目的根目录中创建一个tsconfig.json
文件,其中包含:
{
"compilerOptions": {
"target": "es5",
"out": "SomeNamespace.js"
}
}
这将告诉TypeScript编译器将具有.ts
扩展名的目录中的所有内容编译到名为SomeNamespace.js
的单个文件中。
创建一个名为Foo.ts
的示例文件,其中包含:
namespace SomeNamespace {
export class Foo {}
}
注意,我使用的是namespace
而不是module
。内部模块现在称为名称空间,可以使用namespace
关键字。
展望未来,内部模块将被称为“命名空间”。我们选择使用这个术语是因为这种形式的工作方式与其他语言的名称空间之间的密切关系[...] http://blogs.msdn.com/b/typescript/archive/2015/07/20/announcing-typescript-1-5.aspx
创建另一个名为Bar.ts
的示例文件,其中包含:
/// <reference path="Foo.ts"/>
namespace SomeNamespace {
export class Bar {}
}
这个包含对Foo.ts
的引用。这可确保在编译期间Foo.ts
之前包含Bar.ts
中包含的代码。
最后,在tsc
文件所在的项目目录中运行tsconfig.json
,所有内容都将编译为SomeNamespace.js
。
作为旁注,您可以运行tsc --watch
以使编译器在保存时进行编译。