如何将Javascript文件导入Typescript
我想知道如何从Typescript启动Twitter引导如何将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
$('.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库效果最好