深入浅出 TypeScript | 青训营笔记

87 阅读2分钟

TypeScript 简介

TypeScript简称TS
TS和JS之间的关系其实就是Less/Sass和CSS之间的关系
就像Less/Sass是对CSS进行扩展一样, TS也是对JS进行扩展
就像Less/Sass最终会转换成CSS一样, 我们编写好的TS代码最终也会换成JS
TypeScript是JavaScript的超集,因为它扩展了JavaScript,有JavaScript没有的东西。
硬要以父子类关系来说的话,TypeScript是JavaScript子类,继承的基础上去扩展。

TypeScript 项目

编译上下文

即给文件分组,告诉 TypeScript 哪些文件是有效的,哪些是无效的。

TypeScript 编译

好的 IDE 支持对 TypeScript 的即时编译。但是,如果你想在使用 tsconfig.json 时从命令行手动运行 TypeScript 编译器,你可以通过以下方式:

  • 运行 tsc,它会在当前目录或者是父级目录寻找 tsconfig.json 文件。
  • 运行 tsc -p ./path-to-project-directory 。当然,这个路径可以是绝对路径,也可以是相对于当前目录的相对路径。

你甚至可以使用 tsc -w 来启用 TypeScript 编译器的观测模式,在检测到文件改动之后,它将重新编译。

指定文件

你也可以显式指定需要编译的文件:

{
  "files": [
    "./some/file.ts"
  ]
}

你还可以使用 include 和 exclude 选项来指定需要包含的文件和排除的文件:

{
  "include": [
    "./folder"
  ],
  "exclude": [
    "./folder/**/*.spec.ts",
    "./folder/someSubFolder"
  ]
}

声明空间

在 TypeScript 里存在两种声明空间:类型声明空间与变量声明空间。

类型声明空间

类型声明空间包含用来当做类型注解的内容,例如下面的类型声明:

class Foo {}
interface Bar {}
type Bas = {};

你可以将 FooBarBas 作为类型注解使用,示例如下:

let foo: Foo;
let bar: Bar;
let bas: Bas;

变量声明空间

变量声明空间包含可用作变量的内容,在上文中 Class Foo 提供了一个类型 Foo 到类型声明空间,此外它同样提供了一个变量 Foo 到变量声明空间,如下所示:

class Foo {}
const someVar = Foo;
const someOtherVar = 123;

与此相似,一些用 var 声明的变量,也只能在变量声明空间使用,不能用作类型注解。

const foo = 123;
let bar: foo; // ERROR: "cannot find name 'foo'"

提示 ERROR: "cannot find name 'foo'" 原因是,名称 foo 没有定义在类型声明空间里。

命名空间

在 JavaScript 使用命名空间时, 这有一个常用的、方便的语法:

(function(something) {
  something.foo = 123;
})(something || (something = {}));

something || (something = {}) 允许匿名函数 function (something) {} 向现有对象添加内容,或者创建一个新对象,然后向该对象添加内容。这意味着你可以拥有两个由某些边界拆成的块。