在Typescript

时间:2017-01-17 01:23:36

标签: typescript visual-studio-2015

根据建议,这个问题已被多次询问,但我没有看到解决我问题的答案中的任何内容。

我在Visual Studio 2015中创建了一个新的ASP.NET Core项目,目标是服务Angular2 TypeScript应用程序并使用Webpack打包脚本。我正在重新利用Webstorm项目中的一些组件(同样的东西--Angular2和TypeScript),它在那里工作正常。

不幸的是,我刚刚复制了第一个组件,发现我遇到了一个无法自行解决的错误。在Visual Studio IDE中,我在“require”下获得红色波浪形,而鼠标悬停文本显示为“找不到名称'需要'。无法解析符号'require'”。

这是有问题的组件文本(用于webpack / Angular2的require语法):

@Component({
    selector: "myComponent",
    template: require("./myComponent.html"),
    styles: [require("./myComponent.css")]
})

同样,我也会在下面的代码片段中遇到与require相同的问题:

const sortBy = require('lodash.sortby');

现在,other帖子有answer suggests,我将typeRoots和类型添加到tsconfig.json的compilerOptions中。我看到了这个:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "typeRoots": [
      "node_modules/@types"
    ],
    "types": [
      "node",
      "lodash.sortby"
    ]
  }
}

当然,我已将这些包添加到我的package.json:

{
  "dependencies": {
    "lodash.sortby": "^4.7.0"
  },
  "devDependencies": {
    "@types/node": "^6.0.60",
    "@types/lodash.sortby": "^4.7.0"
  }
}

我已成功安装了这些(以及许多其他文件)。

上面的后一个链接表明我可以将以下内容放在文件的顶部,但这似乎相当hacky并不是我真的想在解决方案中无限期地持续存在,尽管不可否认,它确实解决了问题:

declare var require: any

如前所述,这种require的使用在Webstorm中运行良好,我在两个IDE之间有相同的配置。 Visual Studio发生了什么,这不仅仅是在起作用?

谢谢!

修改

我已经了解了angular2-template-loader的存在。因为我想在这里使用带有Angular2的Webpack,这就是我使用require(根据他们的文档)的原因,但是这个angular2-template-loader负责让你将templateUrl和styleUrls作为相对引用(因此不使用require)指向文件)并在包装过程中为您换出所有内容。

在其他任何地方使用require仍然需要解决方法,如Gary的Typescript Modules链接中所述。

2 个答案:

答案 0 :(得分:1)

我已经通过为Visual Studio 2015安装TypeScript的最新版本(目前)解决了这类问题。目前它是2.1.5。如果您将其用于2016.3.2版本,请更新ReSharper。

答案 1 :(得分:0)

请检查Using require to set templateUrl in Angular 2 while getting error

现在可能无法实现,因为commonjs是一个模块系统。 https://www.typescriptlang.org/docs/handbook/modules.html

根据编译期间指定的模块目标,编译器将为Node.js(CommonJS),require.js(AMD),isomorphic(UMD),SystemJS或ECMAScript 2015本机模块(ES6)模块生成适当的代码 - 装载系统。有关生成的代码中的定义,要求和注册调用的更多信息,请参阅每个模块加载器的文档。