我最近将我的项目从0.8.3更新为0.9.5。我正在编译ES3并使用AMD。我没有把JS组合成一个文件。在开发时,我使用RequireJS动态加载模块。在编译时,我使用RequireJS优化器来生成单个文件。
在重构了一些事情后,我遇到了两个不同的错误(多次出现)。
Module cannot be aliased to a non-module type.
Unable to resolve external module '...'
我的项目中有84个打字稿文件和21个定义文件。使用节点编译器时,我能够以任何顺序传入所有105个ts / d.ts文件,并为每个文件编译JS而没有任何错误或警告。但是,当我只使用节点编译器指定单个ts文件时,我能够看到VS显示的相同模块导入错误。
我读到_references.ts
,但我不确定这会对我的情况有所帮助,因为它只会在使用--out
选项时使用。
我将我的.csproj
与一个基本的HTML TypeScript应用程序进行了比较,我注意到我有几个DependentUpon
条目,新的打字稿项目没有(见下文)。我不确定这些是否有害。我的项目类型是类库,但我正确设置了TypeScript Build设置选项卡以及Tools-> Options-> Text Editor-> TypeScript-> Project。
<Content Include="js\controls\abc\models\xyz\baseRow.js">
<DependentUpon>baseRow.ts</DependentUpon>
</Content>
我想利用VS的错误报告,但我不确定如何解决这些错误。任何建议表示赞赏
答案 0 :(得分:4)
我发现了问题。我的打字稿文件的顶部混合了///<reference
...和imports
,例如:
///<reference path="../../../vendor/underscore/underscore.d.ts"/>
import _ = require("underscore")
///<reference path="../../../vendor/jquery/jquery.d.ts"/>
import $ = require("jql")
///<reference path="../templates/templates.d.ts"/>
import ET = require("text!controls/research/templates/edits-pane/result.html")
我的大多数.d.ts文件都包含环境模块声明。一旦我将所有///<reference
移到顶部,VS就会停止抛出错误并开始按预期编译。
///<reference path="../../../vendor/underscore/underscore.d.ts"/>
///<reference path="../../../vendor/jquery/jquery.d.ts"/>
///<reference path="../templates/templates.d.ts"/>
import _ = require("underscore")
import $ = require("jql")
import ET = require("text!controls/research/templates/edits-pane/result.html")
我不确定这是否符合设计要求。希望它可以帮助别人。
答案 1 :(得分:0)
当我有两个同名但有不同外壳的文件时,我遇到了同样的问题。来自MS,TypeScript可能不支持此操作(Windows文件/路径不区分大小写。)