模块系统与命名空间
.d.ts声明文件和declare关键字
.d.ts声明文件的作用是描述js模块内所有导出接口的类型信息,当在ts模块中引入js模块 需要用到这个声明文件。
.d.ts文件要求与js文件同名并且在同一目录下
在tsconfig.json中 配置declaration:true可自动生成.d.ts文件
@types和DefinitelyTyped仓库
为了在ts中很好的使用第三方库,需要额外安装第三方库的类型声明模块 也就是以@types/开头的包(例如@types/jquery)
lib.d.ts和global.d.ts
安装ts时会顺带安装一个lib.d.ts声明文件,这个文件包含js内置对象以及dom中的各种常见类型,在写ts代码的时候系统会自动推断这些类型 例如:
let body= document.querySelector('body') // let body: HTMLBodyElement | null
let date = new Date() //let date: Date
global.d.ts 需要自己创建 。这是一个全局类型声明文件,在这个文件声明的类型可以全局使用
tsconfig.json
{
"compilerOptions": {
//编译选项
/* 配置说明: https://aka.ms/tsconfig */
/* Projects */
// 和项目相关的
// "incremental": true, /* 增量编译:缓存编译过程 */
// "tsBuildInfoFile": "./.tsbuildinfo", /* 增量编译目录 */
/* JavaScript Support */
// "allowJs": true, /* 对js文件进行编译 */
// "checkJs": true, /* 对js文件进行类型检测 */
/* Language and Environment */
"target": "es5" /* 指定编译成哪个版本的js */,
"lib": [
"ES2015",
"DOM"
] /* Control what method is used to detect module-format JS files. */,
/* Modules */
"module": "commonjs" /* 指定要使用的模块化规范 */,
"rootDir": "src" /* 指定根目录*/,
/* Emit */
// "declaration": true, /* 自动生成 .d.ts 文件*/
// "sourceMap": true, /* 自动生成 sourceMap文件 */
"outDir": "dist" /* 指定输出目录 */,
"esModuleInterop": true /* 兼容js模块无default的导入 */,
"moduleResolution": "Node" /* 以node的模式查找模块*/,
"forceConsistentCasingInFileNames": true /* 引入时强制区分大小写 */,
/* Type Checking */
"strict": true /* 严格模式总开关 */,
/* Completeness */
"skipLibCheck": true /* 跳过所有 .d.ts 文件的类型检查 */
}
}