TypeScript大势所趋,前端主流的库及互联网公司都纷纷转向TypeScript的怀抱,但是在公司内部有些公共的JS 库,并不支持类型系统,并且已经在线上运行了很长时间,在用ts从0开始在写一遍显然是不大现实的,TypeScript 身为 JavaScript 的超集,自然需要考虑到如何让 JS 库也能定义静态类型。TypeScript先后提出了几种解决方案,最终确定了DefinitelyTyped。
前置知识
1、类型声明文件
xxx.d.ts
2、作用
我们在ts中使用非ts编写的类库,必须为这个类库编写类型声明文件,对外暴露他的API,否则无法使用
3、类库种类
- 全局库 通过
<script>
标签引入的第三方库 - 模块库 ES6 模块规范
- umd库 既可以通过
<script>
标签引入,又可以通过import
导入
开启你的第一个类型声明文件
在Typescript中 ,我们编写一个类型声明文件相对来说还是很容易的
下面咱们实现一个全局库的类型声明文件
js code
// src/fristModule.js
const name = 'colin'
function sayHello() {
console.log('hello world!!!');
}
function Cat() {
console.log(`my name is ${
name}`)
}
Cat.sayHello = sayHello
// src/index.ts
// 调用Cat函数 如果不写类型描述的话 vs code中会为我们提示出来,如下图所示,并且在编译的时候ts编译器会报错
Cat.sayHello();
类型声明文件 fristModule.d.ts
// src/fristModule.d.js
declare function Cat(): void;
declare namespace Cat {
function sayHello(): void
}
html文件index.html
// index.html
<!DOCTYPE html>
<html lang="en">
<head>