我正在一个Ionic2/Angular2类型脚本项目中使用图形库C3。我已经通过C3安装了npm,并通过tsd安装了类型定义。
我已将when导入到我自己的ts文件中,如下所示。

import {Component} from '@angular/core';
import {NavController} from 'ionic-angular';
import * as C3 from 'c3';
import * as D3 from 'd3';

@Component({
   templateUrl: 'build/pages/graphs-page/graphs-page.html'
 ....
})

一切看起来都很好。我可以看到c3(和依赖的d3)的打字,而且当我运行时,一切似乎都正常。
但是,当应用程序生成时(当我运行ionic serve时),我总是得到以下类型脚本编译错误…
TypeScript error: D:/dev/ionic2/testcomonents/app/pages/graphs-page/graphs-page.ts(3,21): Error TS2307: Cannot find module 'c3'.
TypeScript error: D:/dev/ionic2/testcomonents/app/pages/graphs-page/graphs-page.ts(4,21): Error TS2307: Cannot find module 'd3'.

有没有人知道我为什么在编译时得到这些错误,当我在IDE中没有错误(我使用的是vscode),一切似乎都很好?
[编辑]
此后,我安装了typescipt 2并使用--traceResolution标志运行。我可以看到tsc似乎只在不同级别的node_modules下查找,而从不在typings文件夹下查找,而vscode就是在这里查找的。
更令人困惑的是(对我来说)当c3.js源位于node_modules/c3文件夹下时,它是如何包含的。我没有特别添加任何对c3.js的引用,但是显示了图表。
tsconfig.json中的设置是
{
   "compilerOptions": {
   "target": "es5",
   "module": "commonjs",
   "emitDecoratorMetadata": true,
   "experimentalDecorators": true
 },

"filesGlob": [
   "**/*.ts",
   "!node_modules/**/*"
 ],
 "exclude": [
   "node_modules",
   "typings/main",
   "typings/main.d.ts"
  ],
 "compileOnSave": false,
 "atom": {
   "rewriteTsconfig": false
 }
}

我在上面的tsconfig.json中尝试了各种编辑,但无法在typings文件夹中查看。
所以我的问题现在变成
如何使typscript在typings文件夹中显示
位于node_modules\c3\c3.js的实际c3.js文件如何包含在离子束中(因为我没有在任何地方添加对它的引用)

最佳答案

我想我现在知道答案了,但如果我错了,请纠正我!
在离子文件D:\dev\ionic2\testcomponents\node_modules\ionic-gulp-browserify-typescript\index.js中,有以下src属性

var defaultOptions = {
   watch: false,
   src: ['./app/app.ts', './typings/main.d.ts'],

因此,如果我将以下内容添加到main.d.ts
/// <reference path="globals/c3/index.d.ts" />
/// <reference path="globals/d3/index.d.ts" />

错误消失了。
如果我运行tsc --traceResolution我仍然会看到错误,但我的猜测是从命令行运行tsc不包括查看上面的离子脚本或main.d.ts
为了消除使用tsc --traceResolution时的错误,我尝试将以下内容添加到文件D:\dev\ionic2\testcomponents\node_modules\c3\package.json
"typings": "../../typings/globals/c3/index.d.ts",

然后对d3做同样的事情。但当我运行离子构建时,这会导致以下错误
TypeScript error: d:/dev/ionic2/testcomponents/app/pages/graphs-page/graphs-page.ts(3,21): Error TS2656: Exported external package
typings file 'd:/dev/ionic2/testcomponents/typings/globals/c3/index.d.ts' is     not a module. Please contact the package author to update the package  definition.

所以,我认为在离子上下文中,正确的做法是将///路径添加到main.d.ts文件。
我所遇到的另一个问题(包括C3.JS等文件),这都是Browserfity / GULP构建的一部分,它检查NoDeSoMead文件夹下的所有内容。它们都有packeage.json文件,对于c3,我们有"main": "c3.js"行。

关于angularjs - 导入C3和D3时Typescript编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38550228/

10-12 18:56