2016-09-12 103 views
2

我在获取文件名称空间以正确解析和编译时遇到了一些问题。根据documentationSO answer,下面应该不会产生问题:TypeScript名称空间跨文件合并

App.Core.ts

namespace App.Core { 
    export function createElem(tagName: string): JQuery { 
     return $(document.createElement(tagName)); 
    } 
} 

App.Core.SubModule.ts

/// <reference path="App.Core.ts" /> 
namespace App.Core.SubModule { 
    export function Test(): JQuery { 
     return App.Core.createElem("div"); 
} 

但是,Visual Studio是给我在App.Core.SubModule.Test函数调用错误,指出Property 'createElem' does not exist on type 'typeof Core'我的理解是,如果命名空间跨越多个文件TS编译器将自动解决这些命名空间。它看起来像相应的JavaScript出来正确,但缺乏智能感知(和红色波浪错误线)是非常令人沮丧,让我第二次猜测我在写什么。

这是我的文件设置,使用TS编译器还是Visual Studio 2015显然破损的TypeScript智能感知功能的问题?

+1

此代码可以很好地编译Webstorm。我怀疑组合输出中文件的顺序有所不同。看看它。无论如何,如果可以的话,离开命名空间并使用外部模块。这将为您节省很多这些类型的麻烦 –

+0

遵循您的建议并改为使用外部模块。 Typescript对我来说仍然是一个非常陌生的想法。花了一点搜索和挖掘才发现Typescript的输出不会在没有像require.js这样的其他资源的浏览器中运行。在TS文档中肯定很难破译和发现。但是,谢谢你的帮助!最后可以开始我的项目的下一部分! – Bwolfing

回答

3

Visual Studio是给我在App.Core.SubModule.Test函数调用,说明住宅“createElem”错误的类型不存在“typeof运算核心”

怀疑你有一个根任何一个文件中的级别为importexport这使得该文件成为模块,并将其从全局命名空间中断开。

快速修复

删除导入/导出,但警告说,它可能导致更多的问题https://basarat.gitbooks.io/typescript/content/docs/tips/outFile.html

适当的修复

不要使用命名空间。只需使用模块:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

+0

我转换为固定第一个问题的外部模块!现在我试图在我的MVC应用程序的Area中实现一个TS文件,并且我希望它引用我的App.Core.ts模块。然而,我发现两个问题:1)相对路径变得繁琐创建('require(“../../../ Scripts/TypeScript/App.Core”)'),2)我在尝试通过分别将它们放入Scripts/TypeScript和Scripts/JS来保持TS和JS分离。 TS导入需要引用TS文件夹进行编译,但JS输出需要引用JS文件夹。通常不建议像这样创建文件夹结构? – Bwolfing

+0

嗨@basarat。你为什么认为,“正确的修复”根本不使用命名空间?据我了解,我认为他们在ASP.NET项目中使用它们是更好的选择,在C#中有后端代码,在TypeScript中有前端代码。我认为,在这种情况下,模块是矫枉过正的。 –

+0

谢谢!我的生活无法知道哪里出了问题。你能不能在一个使用全局命名空间的文件中使用'import'? – jbmilgrom

相关问题