Skip to content

基础结构

以下是 TypeScript 程序的常见组成部分:

  • 声明部分:包括类型声明、接口声明等。
  • 变量声明:包括 let, const 和 var 的使用。
  • 函数声明:包括普通函数和箭头函数。
  • 类声明:用于定义类及其成员。
  • 接口与类型别名:描述类型的结构。
  • 模块化:通过 import 和 export 组织代码。
  • 类型断言:强制类型转换。
  • 泛型:使代码具备更多的复用性。
  • 注释:增加代码的可读性。
  • 类型推断:自动推断类型。
  • 类型守卫:缩小类型范围。
  • 异步编程:支持 async/await。
  • 错误处理:通过 try/catch 进行错误捕捉。

声明部分

  • TypeScript 是一种静态类型的语言,可以通过类型声明来定义变量、函数、类等的类型
  • 类型声明可以帮助代码更具可维护性和可读性。

变量声明

  • 在 TypeScript 中,可以使用 let, const, 和 var 来声明变量。推荐使用 let 和 const,var 用法不再推荐。
    • let 声明的变量是块级作用域的,只能在声明的块级作用域内访问。
    • const 声明的变量也是块级作用域的,但是一旦赋值就不能再被修改。
    • var 声明的变量是函数级作用域的,不推荐使用。
typescript
let a: number = 1;
const b: string = 'hello';

函数声明

  • 函数声明可以使用 function 关键字来定义,也可以使用箭头函数的语法。
  • 函数可以有参数和返回值,参数可以指定类型,返回值也可以指定类型。
typescript
function add(a: number, b: number): number {
	return a + b;
}

const addArrow = (a: number, b: number): number => {
	return a + b;
};

类声明

  • 类声明使用 class 关键字来定义,类可以有属性和方法。
  • 属性可以指定类型,方法可以有参数和返回值,参数和返回值也可以指定类型。
typescript
class Person {
	name: string;
	age: number;

	constructor(name: string, age: number) {
		this.name = name;
		this.age = age;
	}

	sayHello() {
		console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
	}
}

接口与类型别名

  • 接口与类型别名都是用来定义类型的,但是它们有不同的使用场景。
  • 接口用于定义对象的形状,而类型别名可以用于定义任意类型,包括原始类型、联合类型、交叉类型等。
typescript
interface Person {
	name: string;
	age: number;
}
typescript
type Person = {
	name: string;
	age: number;
};

模块和导入导出

  • 模块是指一个独立的代码文件,它可以包含变量、函数、类等。
  • 导入导出是指在模块中定义的变量、函数、类等可以被其他模块使用。
typescript
// 导出
export const a = 1;
export function b() {}
export class C {}

// 导入
import { a, b, C } from './module';

类型断言

  • 类型断言是指在 TypeScript 中,将一个变量的类型强制转换为另一个类型。
  • 类型断言可以使用 as 关键字或尖括号语法来进行。
typescript
const a: any = 1;
const b = a as number;

注释

  • 注释是指在代码中添加的说明性文本,用于解释代码的功能、行为或实现细节。
  • TypeScript 支持单行注释和多行注释。
  • 单行注释使用 // 开头,多行注释使用 /_ 开头和 _/ 结尾。
typescript
// 这是一个单行注释
/* 这是一个多行注释 */

类型推断

  • TypeScript 可以根据上下文自动推断变量的类型,这被称为类型推断。
  • 类型推断可以使代码更简洁,同时也可以避免一些类型错误。
typescript
let a = 1; // 类型推断为 number
let b = 'hello'; // 类型推断为 string

类型守卫

  • 类型守卫是指在 TypeScript 中,通过检查变量的类型来缩小其范围的技术。
  • 类型守卫可以帮助 TypeScript 编译器在编译时确定变量的类型,从而避免运行时的类型错误。
  • 类型守卫可以使用 typeof、instanceof、in 等运算符来实现。
typescript
function isNumber(x: any): x is number {
	return typeof x === 'number';
}

异步编程

  • 异步编程是指在 TypeScript 中,使用 async/await 来处理异步操作。
  • async 函数返回一个 Promise 对象,await 关键字用于等待 Promise 对象的解析。
typescript
async function fetchData(): Promise<string> {
	const response = await fetch('https://api.example.com/data');
	const data = await response.json();
	return data;
}

错误处理

  • 错误处理是指在 TypeScript 中,使用 try/catch 来处理异步操作中可能发生的错误。
  • 当异步操作抛出错误时,try/catch 可以捕获并处理该错误,避免程序崩溃。
typescript
async function fetchData(): Promise<string> {
	try {
		const response = await fetch('https://api.example.com/data');
		const data = await response.json();
		return data;
	} catch (error) {
		console.error('Error fetching data:', error);
		throw error;
	}
}