Skip to content

TypeScript - 基本语法

TypeScript 语法本质上基于 JavaScript 语法(特别是现代 ECMAScript 标准)。如果您了解 JavaScript,那么您已经了解了大部分 TypeScript 的语法。TypeScript 额外增加了 类型注解(type annotations) 和特定的结构,例如 interface(接口)、enum(枚举)和 namespace(命名空间)。

一个 TypeScript 程序包含:

  • Modules(模块): 使用 import 和 export 将代码组织到单独的文件中(推荐方式)。
  • Namespaces(命名空间): 一种旧的代码分组方式(现在较少使用)。
  • Functions(函数): 可重用代码块。
  • Variables(变量): 存储数据的命名容器(使用 let 和 const)。
  • Classes(类): 创建对象的蓝图。
  • Interfaces(接口): 定义对象结构的契约。
  • Statements and Expressions(语句和表达式): 执行操作的指令。
  • Comments(注释): 被编译器忽略的解释性文本。

让我们来看一个带有类型注解的简单“Hello World”示例:

// 文件: hello.ts
const message: string = "Hello, TypeScript World!";
function greet(text: string): void {
console.log(text);
}
greet(message);

关键要素:

  • 第 3 行:声明了一个常量变量 message,带有显式的类型注解 : string,并为其分配了一个字符串值。
  • 第 5 行:定义了一个函数 greet,它接受一个类型为 string 的参数 text,并且返回类型为 void(表示它不返回任何值)。
  • 第 6 行:使用 console.log(一个标准的 JavaScript 函数)打印文本。
  • 第 9 行:调用 greet 函数,将 message 变量作为参数传递。

TypeScript 代码需要先被编译成 JavaScript,然后才能被浏览器或 Node.js 执行。

  1. 保存: 将代码保存到扩展名为 .ts 的文件中(例如 hello.ts)。
  2. 编译: 打开终端或命令提示符,导航到文件所在的目录,然后运行 TypeScript 编译器(tsc):tsc hello.ts。这将生成对应的 JavaScript 文件(例如 hello.js)。
  3. 执行: 使用 Node.js 运行生成的 JavaScript 文件:node hello.js。

编译后的 JavaScript (hello.js):

var message = "Hello, TypeScript World!";
function greet(text) {
console.log(text);
}
greet(message);
// 注意:确切的输出取决于你的 tsconfig.json target 设置。
// 本例假定是 ES3/ES5 等较旧的 target。

对于开发,像 ts-node 这样的工具允许您直接执行 .ts 文件而无需单独的编译步骤(ts-node hello.ts)。对于项目,您通常会使用 tsconfig.json 文件来配置编译。

对于任何非简单的项目,您都应该在项目根目录中使用 tsconfig.json 文件来配置 TypeScript 编译器。您可以使用 tsc --init 生成一个默认文件。

tsconfig.json 中常用的关键选项:

选项描述
target指定输出 JavaScript 的目标 ECMAScript 版本(例如,"ES2016"、"ESNext")。
module指定输出代码的模块系统(例如,"CommonJS"、"ES2020"、"NodeNext")。
outDir将编译后的 JavaScript 输出重定向到指定的目录(例如,"./dist")。
rootDir指定源 .ts 文件的根目录。
strict启用一组严格的类型检查选项(推荐用于新项目)。
esModuleInterop在导入 CommonJS 模块时改善兼容性。
sourceMap生成对应的 .map 文件,用于调试原始 TypeScript 代码。
noImplicitAny(strict 的一部分)对隐式 any 类型的表达式和声明引发错误。

在包含 tsconfig.json 的目录中运行 tsc 将根据这些设置编译项目。

赋予变量、函数、类等的名称。遵循标准的 JavaScript 规则:必须以字母、_ 或 $ 开头,可以包含字母、数字、_、$。区分大小写。不能是保留关键字。

具有特殊含义的保留词(例如,let、const、class、interface、function、if、else、for、while、import、export、type、public、private、protected)。

TypeScript 忽略不属于字符串字面量的空格、制表符和换行符(空白字符)。使用空白字符格式化代码以提高可读性。

TypeScript 区分大小写(variable 和 Variable 是不同的)。

分号(;)在 TypeScript 中(像 JavaScript 一样) technically 是可选的,因为存在自动分号插入(Automatic Semicolon Insertion, ASI)。然而,通常认为在语句末尾包含分号是最佳实践,以避免潜在的歧义并确保一致的代码行为。

用于向代码添加解释性说明,会被编译器忽略。

// 这是单行注释
/*
这是多行注释。
*/
/**
* 这是 JSDoc 注释,通常用于生成文档。
* @param name 要问候的名称
*/
function greetWithDoc(name: string): void {
console.log(`Hello, ${name}`);
}

TypeScript 完全支持面向对象编程(OOP)原则,对 classes、interfaces、继承(extends)和访问修饰符(public、private、protected)提供一流支持。

class Greeter {
private greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet(): void {
console.log(this.greeting);
}
}
const myGreeter = new Greeter("Welcome to OOP in TypeScript!");
myGreeter.greet();

这些基本语法构成了编写 TypeScript 代码的基础。后续章节将更深入地探讨特定功能,如类型、函数、类、模块等。