我正在一个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/