持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
1. tsconfig.json
编译上下文可以对文件进行分组,确定那个文件是有效的,那个文件是无效的。此外还可以定义文件编译时的选项信息。实现编译上下文可以使用 tsconfig.json 文件。
1.1 配置文件 tsconfig.json
可以使用空文件,这样会编译 tsconfig.json 所在目录及其子目录的 .ts 文件,并且会包含一些默认的配置项。
{}
1.2 运行 tsc 命令
它会去当前文件目录或父目录查找 tsconfig.json 文件,并且按照里面的配置项进行编译
1.3 启动观测模式
如果需要实现修改文件后自动进行编译,可以使用 tsc -w 命令。
1.4 指定文件
可以使用 files,include,exclude 三个配置项,其中 files 配置项指定那些文件需要进行编译,inclue 和 exclude 表示包含和排除那些文件。
{
"files": [
"./some/file.ts"
],
"include": [
"./folder"
],
"exclude": [
"./folder/**/*.spec.ts",
"./folder/someSubFolder"
]
}
2. 声明空间
Typescript 有类型声明空间和变量声明空间,两者不能混淆
2.1 类型声明空间
声明的类型不能当作变量来使用,否则会出现报错
interface Bar {}
const bar1 = Bar; // error TS2693: 'Bar' only refers to a type, but is being used as a value here.
const bar2: Bar = "hello"; // 正常
2.2 变量声明空间
声明的变量不能当作类型声明来使用,否则会出现报错。
const message = "hello";
let str1: message; // error TS2749: 'message' refers to a value, but is being used as a type here. Did you mean 'typeof message'?
let str2 = message; // 正常
3 模块
3.1 全局模块
默认状态下,文件处于全局模块中,也就是说一个文件中声明的变量可以在另一个文件中使用
// bar.ts 文件
let bar = "bar";
// b.ts 文件
let b = bar; // 正常
console.log(b);
3.2 文件模块
如果 Typescript 文件的根级别位置有 import 或者 export,则会创建文件的本地作用域。
// bar.ts 文件
export let bar = "bar";
// b.ts 文件
let b = bar; // error TS2304: Cannot find name 'bar'.
console.log(b);
4. 命名空间
- 在文件模块中,可以使用 namespace 表示一组函数的逻辑分组。编译成 javascript 后变成了立即执行函数的形式,可以防止局部变量污染全局命名空间。
// typescript 文件
namespace Utility {
export function log(message) {
console.log(message);
}
export function error(err) {
console.log(err);
}
}
Utility.log("hello");
Utility.error("wow");
// 编译后的 javascript 文件
var Utility;
(function (Utility) {
function log(message) {
console.log(message);
}
Utility.log = log;
function error(err) {
console.log(err);
}
Utility.error = error;
})(Utility || (Utility = {}));
Utility.log("hello");
Utility.error("wow");
- 通过命名空间和文件模块可以改造旧的 javascript 代码
5. 小结
在实际开发 typescript 项目的时候,可以通过 tsconfig.json 文件来修改编译配置项。另外 typescript 项目有类型声明空间,这个不同于 javascript 的变量声明空间,不能混淆。通过文件模块和命名空间可以改造旧的 javascript 代码,注意不能使局部变量污染全局命名空间。
本篇用时3.5小时