《深入理解 TypeScript》笔记之 TypeScript 项目

203 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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. 命名空间

  1. 在文件模块中,可以使用 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");
  1. 通过命名空间和文件模块可以改造旧的 javascript 代码

5. 小结

在实际开发 typescript 项目的时候,可以通过 tsconfig.json 文件来修改编译配置项。另外 typescript 项目有类型声明空间,这个不同于 javascript 的变量声明空间,不能混淆。通过文件模块和命名空间可以改造旧的 javascript 代码,注意不能使局部变量污染全局命名空间。

本篇用时3.5小时