如何将Javascript文件导入Typescript

如何将Javascript文件导入Typescript,javascript,twitter-bootstrap,typescript,angular,Javascript,Twitter Bootstrap,Typescript,Angular,我想知道如何从Typescript启动Twitter引导 $('.carousel').carousel() 我必须实现jquery.d.ts来修复$-sign调用,但是我仍然得到一个错误,在jquery.d.ts中找不到.carousel() 我尝试将javascript绑定到一个模块,并这样调用它。但它似乎不起作用。 这是我的代码: 旋转传送带d.ts declare module 'carousel/carousel' { var start: any; export

我想知道如何从Typescript启动Twitter引导

$('.carousel').carousel()
我必须实现jquery.d.ts来修复$-sign调用,但是我仍然得到一个错误,在jquery.d.ts中找不到.carousel()

我尝试将javascript绑定到一个模块,并这样调用它。但它似乎不起作用。 这是我的代码:

旋转传送带d.ts

declare module 'carousel/carousel' {
    var start: any; 
    export = start;
}
System.register('carousel/carousel', [], true, function () {
    var carousel = function () {
        function carousel() {
        }
        carousel.prototype.start = function () {
            $('.carousel').carousel();
        }
    }
    exports.carousel = carousel;
});
import {Component} from "angular2/core";
import {bootstrap} from 'angular2/platform/browser';
import {Carousel} from "carousel/carousel";

@Component({
    selector: "carousel",
    bindings: [CarouselComponent],
    templateUrl: 'carousel.html'
})

export class CarouselComponent {
    start() {
            carousel.start();
        }        
    }
}

bootstrap(CarouselComponent)
  npm install --save-dev @types/jquery
  npm install --save-dev @types/bootstrap
carousel.js

declare module 'carousel/carousel' {
    var start: any; 
    export = start;
}
System.register('carousel/carousel', [], true, function () {
    var carousel = function () {
        function carousel() {
        }
        carousel.prototype.start = function () {
            $('.carousel').carousel();
        }
    }
    exports.carousel = carousel;
});
import {Component} from "angular2/core";
import {bootstrap} from 'angular2/platform/browser';
import {Carousel} from "carousel/carousel";

@Component({
    selector: "carousel",
    bindings: [CarouselComponent],
    templateUrl: 'carousel.html'
})

export class CarouselComponent {
    start() {
            carousel.start();
        }        
    }
}

bootstrap(CarouselComponent)
  npm install --save-dev @types/jquery
  npm install --save-dev @types/bootstrap
应用程序ts

declare module 'carousel/carousel' {
    var start: any; 
    export = start;
}
System.register('carousel/carousel', [], true, function () {
    var carousel = function () {
        function carousel() {
        }
        carousel.prototype.start = function () {
            $('.carousel').carousel();
        }
    }
    exports.carousel = carousel;
});
import {Component} from "angular2/core";
import {bootstrap} from 'angular2/platform/browser';
import {Carousel} from "carousel/carousel";

@Component({
    selector: "carousel",
    bindings: [CarouselComponent],
    templateUrl: 'carousel.html'
})

export class CarouselComponent {
    start() {
            carousel.start();
        }        
    }
}

bootstrap(CarouselComponent)
  npm install --save-dev @types/jquery
  npm install --save-dev @types/bootstrap

谢谢你的帮助。

我会像这样重构你的
carousel.js
文件:

System.register("carousel/carousel", [], true, function(require, exports, module) {
  var carousel = function () {
    function carousel() {
    }
    carousel.prototype.start = function () {
        $('.carousel').carousel();
    }
  }
  exports.carousel = carousel;
});
创建一个文件“jquery caroussel.d.ts”(并将其添加到reference.ts中) 其中:

interface JQuery {
   carousel();
}
它会告诉ts编译器有一个methode carousel(),它将在以后实现。(在浏览器中,通过carousel.js文件。)


如果您对carousel以外的另一个lib有类似的问题,这里有大量的接口示例:

问题是您没有
carousel()
的键入定义。正如您所提到的,这是Twitter引导程序中的一个函数,但您只包括jQuery的键入定义(*.d.ts)。您需要以相同的方式将它们包括在引导中

您可以从DefinitelyTyped项目中获取完整的引导绑定定义,可以从它们的或作为一个项目。以下是基本部分:

interface CarouselOptions {
    interval?: number;
    pause?: string;
    wrap?: boolean;
    keybord?: boolean;
}

interface JQuery {
    carousel(options?: CarouselOptions): JQuery;
    carousel(command: string): JQuery;
}

您可以通过为所需的每个库声明环境模块来导入JS文件。您可以有一个
ambient.d.ts
文件,用于存储所有环境模块声明(即对于您想要导入但没有类型定义的JavaScript库)

环境温度:

//每个JavaScript库都有一个单独的模块声明
//要导入没有任何类型定义的对象
声明模块“my-module-i-want-to-import”{
常数a:任何;
导出默认值a;
}
需要
my-module-i-want-to-import
导入的任何其他*.ts文件:

// Include reference to your ambient module declarations
///<reference path="./ambient.d.ts" />
import myModule from 'my-module-i-want-to-import';

// Do something with myModule
console.log(myModule);
//包括对环境模块声明的引用
///
从“my-module-i-want-to-import”导入myModule;
//用myModule做些什么
console.log(myModule);
Angular最终发布后(用于jquery.js和bootstrap.js) 1)添加以下npm包

declare module 'carousel/carousel' {
    var start: any; 
    export = start;
}
System.register('carousel/carousel', [], true, function () {
    var carousel = function () {
        function carousel() {
        }
        carousel.prototype.start = function () {
            $('.carousel').carousel();
        }
    }
    exports.carousel = carousel;
});
import {Component} from "angular2/core";
import {bootstrap} from 'angular2/platform/browser';
import {Carousel} from "carousel/carousel";

@Component({
    selector: "carousel",
    bindings: [CarouselComponent],
    templateUrl: 'carousel.html'
})

export class CarouselComponent {
    start() {
            carousel.start();
        }        
    }
}

bootstrap(CarouselComponent)
  npm install --save-dev @types/jquery
  npm install --save-dev @types/bootstrap
2)tsconfig.json中类型数组中添加以下条目

  "types": [
             "jquery",
             "bootstrap",  
           ]
现在你可以走了


最后,我将代码更改为使用“InjectionToken”。 如下所述:

您可以简单地插入jQuery全局实例并使用它。为此,您不需要任何类型定义或键入

import { InjectionToken } from '@angular/core';

export const JQ_TOKEN = new InjectionToken('jQuery');

export function jQueryFactory() {
    return window['jQuery'];
}

export const JQUERY_PROVIDER = [
    { provide: JQ_TOKEN, useFactory: jQueryFactory },
];
在app.module.ts中正确设置后:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';

import { JQ_TOKEN } from './jQuery.service';

declare let jQuery: Object;

@NgModule({
    imports: [
        BrowserModule
    ],
    declarations: [
        AppComponent
    ],
    providers: [
        { provide: JQ_TOKEN, useValue: jQuery }
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }
您可以开始在组件中使用它:

import { Component, Inject } from '@angular/core';
import { JQ_TOKEN } from './jQuery.service';

@Component({
    selector: "selector",
    templateUrl: 'somefile.html'
})
export class SomeComponent {
    constructor( @Inject(JQ_TOKEN) private $: any) { }

    somefunction() {
        this.$('...').doSomething();
    }
}

你查过那个问题了吗jQuery插件(以及其他基于插件的库)的问题是,你不仅需要一个library.d.ts文件来创建基本库,还需要一个plugin.d.ts文件来创建每个插件。这对我来说是最好的解决方案。有点愚蠢,我想到了使用jquery.d.ts,但没有进一步考虑,也没有使用引导程序:),仍然没有为我的项目这样做。实现.d.ts库效果最好