教程 > typescript 教程 > 阅读:208

typescript 声明文件——迹忆客-ag捕鱼王app官网

typescript 作为 javascript 的超集,在开发过程中不可避免要引用其他第三方的 javascript 的库。虽然通过直接引用可以调用库的类和方法,但是却无法使用typescript 诸如类型检查等特性功能。为了解决这个问题,需要将这些库里的函数和方法体去掉后只保留导出类型声明,而产生了一个描述 javascript 库和模块信息的声明文件。通过引用这个声明文件,就可以借用 typescript 的各种特性来使用库文件了。

假如我们想使用第三方库,比如 jquery,我们通常这样获取一个 id 是 foo 的元素:

$('#foo');
// 或
jquery('#foo');

但是在 typescript 中,我们并不知道 $jquery 是什么东西:

jquery('#foo');
// index.ts(1,1): error ts2304: cannot find name 'jquery'.

这时,我们需要使用 declare 关键字来定义它的类型,帮助 typescript 判断我们传入的参数类型对不对:

declare var jquery: (selector: string) => any;
jquery('#foo');

declare 定义的类型只会用于编译时的检查,编译结果中会被删除。

上例的编译结果是:

jquery('#foo');

声明文件

声明文件以 .d.ts 为后缀,例如:

jiyik.d.ts

声明文件或模块的语法格式如下:

declare module module_name {
}

typescript 引入声明文件语法格式:

/// 

当然,很多流行的第三方库的声明文件不需要我们定义了,比如 jquery 已经有人帮我们定义好了:jquery in definitelytyped。

实例

以下定义一个第三方库来演示:

calcthirdpartyjslib.js 文件代码:

var jiyik;  
(function(jiyik) {
    var calc = (function () { 
        function calc() { 
        } 
    })
    calc.prototype.dosum = function (limit) {
        var sum = 0; 
 
        for (var i = 0; i <= limit; i  ) { 
            sum = sum   i; 
        }
        return sum; 
    }
    runoob.calc = calc; 
    return calc; 
})(jiyik || (jiyik = {})); 
var test = new jiyik.calc();

如果我们想在 typescript 中引用上面的代码,则需要设置声明文件 calc.d.ts,代码如下:

calc.d.ts 文件代码:

declare module jiyik { 
   export class calc { 
      dosum(limit:number) : number; 
   }
}

声明文件不包含实现,它只是类型声明,把声明文件加入到 typescript 中:

calctest.ts 文件代码:

///  
var obj = new jiyik.calc(); 
// obj.dosum("hello"); // 编译错误
console.log(obj.dosum(10));

下面这行导致编译错误,因为我们需要传入数字参数:

obj.dosum("hello");

使用 tsc 命令来编译以上代码文件:

$ tsc calctest.ts

生成的 javascript 代码如下:

calctest.js 文件代码:

///  
var obj = new jiyik.calc();
//obj.dosum("hello"); // 编译错误
console.log(obj.dosum(10));

最后我们编写一个 jiyik.html 文件,引入 calctest.js 文件及第三方库 calcthirdpartyjslib.js:

实例


迹忆客(jiyik.com)
 
 
    
    

迹忆客测试一下。

查看笔记

扫码一下
查看教程更方便
网站地图