我是typeScript的新手,我希望能够使用没有定义文件的第三方库。打字稿是否允许您使用外部库?
我想使用的库是filesaver.js https://github.com/eligrey/FileSaver.js/
我是否需要为此库创建定义文件?
我只需要有人指出我正确的方向。
非常感谢!
答案 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);
})();