声明文件-1

declare var 声明全局变量
declare function 声明全局方法
declare class 声明全局类
declare enum 声明全局枚举类型
declare namespace 声明(含有子属性的)全局对象
interface 和 type 声明全局类型
export 导出变量
export namespace 导出(含有子属性的)对象
export default ES6 默认导出
export = commonjs 导出模块
export as namespace UMD 库声明全局变量
declare global 扩展全局变量
declare module 扩展模块
/// 三斜线指令
假如我们想使用第三方库 jQuery,一种常见的方式是在 html 中通过

jQuery(’#foo’);
什么是申明文件
通常我们会把声明语句放到一个单独的文件(jQuery.d.ts)中,这就是声明文件3:
声明文件必需以 .d.ts 为后缀。
一般来说,ts 会解析项目中所有的 *.ts 文件,当然也包含以 .d.ts 结尾的文件。所以当我们将 jQuery.d.ts 放到项目中时,其他所有 *.ts 文件就都可以获得 jQuery 的类型定义了。
在这里插入图片描述
declare function
declare function 用来定义全局函数的类型。jQuery 其实就是一个函数,所以也可以用 function 来定义
// src/jQuery.d.ts

declare function jQuery(selector: string): any;

declare class
当全局变量是一个类的时候,我们用 declare class 来定义它的类型7:
// src/Animal.d.ts

declare class Animal {
name: string;
constructor(name: string);
sayHi(): string;
}
应用
**// src/index.ts

let cat = new Animal(‘Tom’);
**
除了全局变量之外,可能有一些类型我们也希望能暴露出来。在类型声明文件中,我们可以直接使用 interface 或 type 来声明一个全局的接口或类型12:
// src/jQuery.d.ts

interface AjaxSettings {
method?: ‘GET’ | ‘POST’
data?: any;
}
declare namespace jQuery {
function ajax(url: string, settings?: AjaxSettings): void;
}
应用
// src/index.ts

let settings: AjaxSettings = {
method: ‘POST’,
data: {
name: ‘foo’
}
};
jQuery.ajax(’/api/post_something’, settings);

防止命名冲突
暴露在最外层的 interface 或 type 会作为全局类型作用于整个项目中,我们应该尽可能的减少全局变量或全局类型的数量。故最好将他们放到 namespace 下13:
// src/jQuery.d.ts

declare namespace jQuery {
interface AjaxSettings {
method?: ‘GET’ | ‘POST’
data?: any;
}
function ajax(url: string, settings?: AjaxSettings): void;
}
注意,在使用这个 interface 的时候,也应该加上 jQuery 前缀
// src/index.ts

let settings: jQuery.AjaxSettings = {
method: ‘POST’,
data: {
name: ‘foo’
}
};
jQuery.ajax(’/api/post_something’, settings);
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值