2016-02-05 147 views
3

我找到了一个可能的答案来解决我的问题: Is any JavaScript code a valid TypeScript code?TypeScript文件中的JavaScript代码.ts不起作用

我正在使用Visual Studio和TypeScript插件处理Web项目。在下面的帖子中,我发现了这个答案:

Not any valid JavaScript code is valid TypeScript see my example below.

var testVar = 4; testVar = "asdf";

TypeScript gives the following error: Cannot convert string to number. To make that work in TypeScript add ":any" like below.

var testVar: any = 4; testVar = "asdf"

This happens because TypeScript noticed testVar is declared and in the declaration it is assigned a number and therefore it decides it should stay a number.

我想使用HighCharts。如果我将这些代码保存在Javascript文件中,我不会收到任何错误。但是,当我保存打字稿文件中的代码,我有一个错误:

"Cannot find name "HighCharts".

在这里你可以看到我的代码的相关部分:

// Put definitions of highcharts, highstocks below this line 
// Example 1 Chart 
var initializeChart1 = function() { 
    require(['jquery', 'highcharts', 'highchartsMore', 'highchartsExporting'], function ($) { 

     $("#myChart").highcharts({ 

      chart: { 
       type: 'spline', 
       backgroundColor: '#ECECEC', 

// ------THIS GIVES AN ERROR, BUT WORKING WHEN SAVED AS .JS file 
       animation: Highcharts.svg, // don't animate in old IE 
// ------------------------- 

... 

为什么我要保持我的JavaScript代码的原因TS文件内部很简单:我目前正在学习TypeScript,并且在同一个文件中保留JavaScript和TypeScript版本或相同的代码。根据TypeScript是否完整/正在工作,我取消注释并评论JavaScript。

我的问题是:

  1. 为什么我得到这个错误?
  2. 是否可以在TS文件中使用任何JavaScript代码 ?
+0

您是否添加了对d.ts文件的引用? https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/highcharts-ng和https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/highcharts/highcharts.d.ts – Jerome2606

+1

我通过添加在require(['jquery','highcharts','highchartsMore','highchartsExporting'),函数($,Highcharts){}中的“Highcharts”引用。但我仍然困惑为什么这个代码在保存时没有这个引用就可以工作。 js文件但保存为.ts文件时无法正常工作... – Marek

+1

引用仅仅是为了帮助您以强有力的方式编写代码,并且需要打印脚本来指出可能出现的运行时错误。是为了让IDE在键入代码时提供更丰富的环境来查找常见错误。检查此答案以获得打印机的简单好点子http://stackoverflow.com/questions/12694530/what-is-typescript-and-为什么我会使用它在位的javascript – Jerome2606

回答

4

是的,您可以在打字稿文件中使用js代码,但编译器需要了解您使用的对象和库。 你有两种选择来编译。为您的库添加.d.ts文件或者欺骗编译器,您可以像这样自己声明Highcharts对象。

declare var Highcharts: any; 
var initializeChart1 = function() { 
    require(['jquery', 'highcharts', 'highchartsMore', 'highchartsExporting'], function ($) { 

     $("#myChart").highcharts({ 

      chart: { 
       type: 'spline', 
       backgroundColor: '#ECECEC', 
       animation: Highcharts.svg, // don't animate in old IE 
+0

仍然需要用'requirejs'来做到这一点 – shotor