①. JS文件 + .d.ts文件 === ts文件
②. 说明:
a. 一般的ts文件中有逻辑代码部分和interface说明书部分.
b. 但.d.ts是类似一个纯粹的说明书文件,没有逻辑代码.
c. .d.ts文件可以让JS文件继续维持自己JS文件的身份,而拥有TS的类型保护.
③. 一般写业务代码不会用到,但是点击类型跳转一般会跳转到.d.ts文件.
(1). 新建一个jquery.d.ts
declare var jquery: (selector: string) => any
npm install --save @types/jquery
qs库由jsx改为tsx方案
(1). 安装qs库:
yarn add qs -D
(2). 引入到.ts文件报错:
import * as qs from 'qs'
Could not find a declaration file for module 'qs'.
Try `npm i --save-dev @types/qs` if it exists or add a new declaration (.d.ts) file containing `declare module 'qs';`
说明:
①. declaration file指的是ts的类型的声明文件:
a. 查看node_modules下面qs源码全是.js的后缀.
b. js文件是没有类型定义的,哪怕是语法写错了,也不会报错,因为js文件没有类型定义(说明书).
c. 在ts的文件中也想引入带有ts的包
(3). 安装说明书:
yarn add @types/qs -D
①. 这个是qs的ts定义文件:
a. 只有在开发中使用.
b. 安装完后,找到node_modes/@types/qs/index.d.ts就是对qs的js文件做了类型定义,把js代码转化为ts.
c. 是一个纯粹的说明书文件.
d. 作用可以理解为给js打一个ts的补丁.
e. 在业务开发中,基本上这个文件是没有作用的.
②. d.ts可以理解为给js打补丁用的.
③. 为什么不直接改上面那个库的js文件改成ts文件呢,或者加入类型定义呢?
a. 因为现在大多数还是使用js代码,ts的应用规模肯定比js少.
b. 库的作者希望是有更多的下载使用量,如果使用了ts,就提高了门槛.
c. 一般开源作者是源代码用js来写,再加一个ts的补丁(如: @types/qs)
④. 作者可能不同:
a. 比如,在开源社区写了一个js插件,很好用,有一些开发者需要使用ts.
b. 此时,可能有一些热心群众写一个d.ts文件,可能原作者与ts作者不是同一个人.