TypeScript 基础教程
TypeScript 是 JavaScript 的超集,为 JavaScript 添加了静态类型系统,帮助开发者在编码阶段捕获错误并提高代码质量。
安装和配置
通过 npm 安装 TypeScript:
npm install -g typescript
创建 tsconfig.json
配置文件:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"esModuleInterop": true
}
}
基本类型
// 基本类型
let num: number = 42;
let str: string = "Hello, TypeScript";
let isTrue: boolean = true;
// 数组
let numbers: number[] = [1, 2, 3];
let fruits: Array<string> = ['apple', 'banana', 'orange'];
// 元组
let tuple: [string, number] = ['age', 30];
接口和类型
// 接口
interface Person {
name: string;
age: number;
email?: string; // 可选属性
}
let user: Person = {
name: "John Doe",
age: 30
};
// 类型别名
type ID = string | number;
函数类型
// 函数类型
function add(x: number, y: number): number {
return x + y;
}
// 箭头函数
const multiply = (x: number, y: number): number => x * y;
// 可选参数和默认参数
function greet(name: string, greeting?: string): string {
return `${greeting || 'Hello'}, ${name}!`;
}
泛型
// 泛型函数
function identity<T>(arg: T): T {
return arg;
}
// 泛型接口
interface GenericIdentityFn<T> {
(arg: T): T;
}
类和继承
class Animal {
constructor(public name: string) {}
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Dog extends Animal {
bark() {
console.log('Woof! Woof!');
}
}
枚举
enum Color {
Red,
Green,
Blue
}
let c: Color = Color.Green;
高级类型
// 联合类型
type StringOrNumber = string | number;
// 交叉类型
type Employee = { name: string } & { id: number };
// 类型守卫
function isString(x: any): x is string {
return typeof x === "string";
}
模块和命名空间
// 导出
export interface Calculator {
add(x: number, y: number): number;
}
// 导入
import { Calculator } from './calculator';
装饰器
function log(target: any, key: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log(`Calling method ${key} with arguments: ${args}`);
return originalMethod.apply(this, args);
};
return descriptor;
}
class Example {
@log
greet(name: string) {
return `Hello, ${name}!`;
}
}
结论
TypeScript 通过引入静态类型系统,为 JavaScript 开发带来了更强的类型安全性和更好的开发体验。它提供了丰富的类型系统、接口、泛型等特性,使得大型应用的开发变得更加可靠和可维护。