使用TypeScript的第三方js文件

时间:2014-10-02 11:41:31

标签: javascript typescript

我是typeScript的新手,我希望能够使用没有定义文件的第三方库。打字稿是否允许您使用外部库?

我想使用的库是filesaver.js https://github.com/eligrey/FileSaver.js/

我是否需要为此库创建定义文件?

我只需要有人指出我正确的方向。

非常感谢!

3 个答案:

答案 0 :(得分:10)

  

打字稿是否允许您使用外部库?

很容易。你只需要告诉打字稿。让我们来看看你的情况。

  

我想使用的库是filesaver.js

简单只需一个函数saveAs。最简单的声明:

declare var saveAs:any; 

现在以下编译就好了:

declare var saveAs:any; 
var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");

要编写更高级的declrations,请查看:https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/declaration%20files/Introduction.md

注意

更多完全但可能过于严格的样本:

declare function saveAs(data:Blob , filename:string );
var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");

答案 1 :(得分:1)

另一种在打字稿中调用外部库而不编译错误的方法是使用“myglobalfunction”符号窗口。

例如:

jQuery call: window["$"]
fileSaver.js : window["saveAs"](blob, "hello world.txt");

等...

这些在typescript中的调用不会产生编译错误,但它们是调用相同标准函数的全功能方法。

答案 2 :(得分:0)

实用但可能不太合适的类别中,不那么优雅且非TypeScript的方法是简单地声明但不分配你想要的变量/函数与TypeScript一起使用。这个给你Intellisense,但它 允许你快速使用库而不创建任何声明或滚动你自己的d.ts文件。

例如,这是一个Angular示例,在 app.core 模块上提供 OidcTokenManager 作为常量:

((): void => {
    angular
        .module('app.core')
        .constant('OidcTokenManager', OidcTokenManager);

})();

这将生成 TS2304 - 无法找到名称' OidcTokenManager' TypeScript错误。

但是,只需在 any 类型中声明 OidcTokenManager ,就可以让TypeScript通过:

((): void => {    
    let OidcTokenManager: any;   

    angular
        .module('app.core')
        .constant('OidcTokenManager', OidcTokenManager);

})();