在 ts
中直接使用jQuery
,是会报错的,一般情况是直接安装一个已写好的jQuery.d. ts
文件
不过这次是自己学习写一下jQuery.d. ts
文件。
$(function(){ alert(1111) }) // $ 会报错
$(function(){ $("body").html("123") }) //内部 $ 也会报错
$
.d. ts
文件中定义$
:
$
$
类型是函数,返回是空$
函数接收一个参数readFunc
,返回空readFunc
类型函数,返回是空declare var $: (readFunc: () => void) => void;
$
.d. ts
文件中定义$
:
$
$
函数接收一个参数readFunc
,返回空readFunc
类型是函数,返回是空declare function $(readFunc: () => void): void;
先在$
只可以接收函数作为参数,但现在$
需要接收一个选择器作为参数,怎么弄呢?
$
.d. ts
文件中定义$
:
$
$
函数接收一个参数selector
,返回一个对象,对象中要包含html
的方法selector
类型是string
;html
类型是函数html
函数接收一个html
参数,返回空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
文件中定义$
:
interface
声明一个接口jQuery
jQuery
拥有两种方法的实现方式$
,jQuery
interface jQuery {
(readFunc: () => void): void;
(selector: string): jQueryInstance;
}
declare var $: jQuery;
上面实现了$
的函数调用,那如何实现对象调用呢?
$(function(){
$("body").html("123")
new $.fn.init() // fn 会报错
})
$.fn.init()
是一个对象形式的调用,需要使用命名空间。
.d. ts
文件中定义$
:
$
$
是一个对象,有一个fn
的对象fn
类型是命名空间,有一个init
方法init
是一个构造方法declare namespace $ {
namespace fn {
class init {}
}
}
Tip
:当既要$
是函数,又要$
是对象时,用namespace
;如果只是函数调用可以用interface
。
另外可添加微信ttxbg180218
交流