Appearance
基础结构
以下是 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;
}
}