学习自己写TS中的描述文件

本文介绍如何创建自己的 TypeScript 描述文件(.d.ts)。从定义全局变量和函数,到利用函数重载优化代码,再到重构代码和对象的类型定义,通过实例详细解析整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ts 中直接使用jQuery,是会报错的,一般情况是直接安装一个已写好的jQuery.d. ts 文件

不过这次是自己学习写一下jQuery.d. ts 文件。

$(function(){ alert(1111) })      // $ 会报错
$(function(){ $("body").html("<div>123</div>") })     //内部 $ 也会报错

定义全局变量$

.d. ts 文件中定义$

  1. 定义一个全局变量$
  2. $类型是函数,返回是空
  3. $函数接收一个参数readFunc,返回空
  4. readFunc类型函数,返回是空
declare var $: (readFunc: () => void) => void;

定义全局函数$

.d. ts 文件中定义$

  1. 定义一个全局函数$
  2. $函数接收一个参数readFunc,返回空
  3. readFunc类型是函数,返回是空
declare function $(readFunc: () => void): void;

先在$只可以接收函数作为参数,但现在$需要接收一个选择器作为参数,怎么弄呢?

利用函数重载声明$

.d. ts 文件中定义$

  1. 利用函数重载再次声明一个全局函数$
  2. $函数接收一个参数selector,返回一个对象,对象中要包含html的方法
  3. selector类型是stringhtml类型是函数
  4. html函数接收一个html参数,返回空
  5. 参数html类型是string
declare function $(
  selector: string
): {
  html: (html: string) => void;
};

interface优化代码

html函数应该返回的是自身,这样在后面使用链式调用

interface jQueryInstance {
  html: (html: string) => jQueryInstance;
}
declare function $(selector: string): jQueryInstance;

interface重构代码

.d. ts 文件中定义$

  1. interface声明一个接口jQuery
  2. 用接口的语法实现两个函数的重载,意思是接口jQuery拥有两种方法的实现方式
  3. 定义一个全局变量$
  4. 它的类型是jQuery
interface jQuery {
  (readFunc: () => void): void;
  (selector: string): jQueryInstance;
}

declare var $: jQuery;

对对象进行类型定义

上面实现了$的函数调用,那如何实现对象调用呢?

$(function(){ 
  $("body").html("<div>123</div>")
  new $.fn.init()         // fn 会报错
})

$.fn.init()是一个对象形式的调用,需要使用命名空间。

.d. ts 文件中定义$

  1. 定义命名空间$
  2. $是一个对象,有一个fn的对象
  3. fn类型是命名空间,有一个init方法
  4. init是一个构造方法
declare namespace $ {
  namespace fn {
    class init {}
  }
}

Tip:当既要$是函数,又要$是对象时,用namespace;如果只是函数调用可以用interface

另外可添加微信ttxbg180218交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值