javascript - 为什么tsconfig需要编译Javascript文件Angular

标签 javascript angular typescript

我想将 canvasjs 用于我正在制作的 Angular 项目中的一些图表 (https://canvasjs.com/angular-charts/)

为此,我已经下载了他们的 javascript 文件,并按照建议将其导入我的组件之一。

import * as CanvasJS from './../../../assets/canvasjs.min.js';

但是,当我尝试使用 npm start 运行我的应用程序时,有时会收到

ERROR in src/app/Components/multi-camera-view/multi-camera-view.component.ts(2,27): error TS6143: Module './../../../assets/canvasjs.min.js' was resolved to '/src/assets/canvasjs.min.js', but '--allowJs' is not set.

快速阅读后,allowJs 允许 ts 编译器编译 javascript 文件,但如果它们已经在 javascript 中,为什么还需要编译这些文件呢?

浏览器无法读取 typescript 但可以读取 javascript。那么为什么需要编译呢?

我尝试在根目录下的 tsconfig.json 文件中添加 allowJs 标志

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "allowJs": true,
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }
}

但后来我得到了错误:

ERROR in error TS5055: Cannot write file '/src/assets/canvasjs.min.js' because it would overwrite input file.
  Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig.

我访问了该链接并将 noEmit 设置为 true,但我的应用程序可以正常构建但无法运行。那么,使用此 javascript 文件的最佳方式是什么?

谢谢!

最佳答案

--allowJS 标志允许编译器从 JavaScript 文件推断类型信息,以便它可以对您对该文件的使用进行类型检查。

它可能不像 TypeScript 文件中的类型信息那么丰富,但在大多数情况下它可以很好地处理类型信息。

所以这不是将 JavaScript 转换成更多的 JavaScript,而是让依赖于 JavaScript 的 TypeScript 代码更易于管理。

关于javascript - 为什么tsconfig需要编译Javascript文件Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53650471/

相关文章:

javascript - 如何将数组对象更新到mongoDB

javascript - 将文件从 Electron 发送到连接在 LAN 中的服务器

javascript - aws javascript sdk getSignedUrl 操作上的访问控制允许来源?

angular - 如何在 Angular 中显示传单标记?

javascript - 等待 Angular 5 中的 Http 响应

javascript - 如何使用 typescript 声明(.ts.d 文件)在 Angular cli 应用程序中使用第三方 javascript API/SDK?

javascript - 如果包含为 .js 文件,我的 jquery 代码将无法运行?

angular - Angular 5 中的 innerHtml 和指令

javascript - 如何在 Angular 6 中处理多个 http 请求

javascript - 有没有办法删除世博会每个屏幕上的标题?