TS 从入门到深度掌握,晋级TypeScript高手

xiao_wen123 · · 92 次点击 · · 开始浏览    

TS 从入门到深度掌握,晋级TypeScript高手

引言

TypeScript(简称TS)是JavaScript的超集,由微软开发并维护。它通过添加静态类型、类、接口等特性,极大地提升了JavaScript的开发体验和代码质量。TypeScript不仅适用于大型项目,也能够在小型项目中提供更好的开发效率和可维护性。本文将带你从TypeScript的基础入门,逐步深入,最终晋级为TypeScript高手。

目录

  1. TypeScript简介

  2. 环境搭建

  3. 基础语法

  4. 高级特性

  5. 工程化实践

  6. 性能优化

  7. 实战案例

  8. 总结与进阶

1. TypeScript简介

TypeScript是一种开源的编程语言,它扩展了JavaScript的语法,增加了类型系统和其他现代编程特性。TypeScript代码最终会被编译为JavaScript代码,因此可以在任何支持JavaScript的环境中运行。

优点

  • 静态类型检查:在编译时捕获类型错误,减少运行时错误。

  • 更好的开发工具支持:代码补全、接口提示、重构等功能。

  • 面向对象编程:支持类、接口、继承等特性。

  • 渐进式采用:可以在现有JavaScript项目中逐步引入TypeScript。

2. 环境搭建

安装TypeScript

首先,确保你已经安装了Node.js和npm。然后,通过npm安装TypeScript:

bash

复制

npm install -g typescript

创建第一个TypeScript文件

创建一个名为hello.ts的文件,并编写以下代码:

typescript

复制

function greet(name: string): string {
    return `Hello, ${name}!`;
}

console.log(greet("TypeScript"));

编译TypeScript文件

使用TypeScript编译器(tsc)将TypeScript文件编译为JavaScript:

bash

复制

tsc hello.ts

这将生成一个hello.js文件,你可以使用Node.js运行它:

bash

复制

node hello.js

3. 基础语法

类型注解

TypeScript通过类型注解来定义变量的类型:

typescript

复制

let age: number = 25;
let name: string = "Alice";
let isStudent: boolean = true;

接口

接口用于定义对象的形状:

typescript

复制

interface Person {
    name: string;
    age: number;
}

let person: Person = {
    name: "Bob",
    age: 30
};

TypeScript支持面向对象编程,可以使用类来定义对象:

typescript

复制

class Animal {
    name: string;

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

    speak(): void {
        console.log(`${this.name} makes a noise.`);
    }
}

let dog = new Animal("Dog");
dog.speak();

泛型

泛型允许你编写可重用的组件:

typescript

复制

function identity<T>(arg: T): T {
    return arg;
}

let output = identity<string>("Hello");

4. 高级特性

高级类型

TypeScript提供了多种高级类型,如联合类型、交叉类型、类型别名等:

typescript

复制

type StringOrNumber = string | number;

function printId(id: StringOrNumber) {
    console.log(`ID: ${id}`);
}

printId(101);
printId("202");

装饰器

装饰器是一种特殊类型的声明,可以附加到类、方法、属性或参数上:

typescript

复制

function log(target: any, key: string, descriptor: PropertyDescriptor) {
    const originalMethod = descriptor.value;

    descriptor.value = function (...args: any[]) {
        console.log(`Calling ${key} with`, args);
        return originalMethod.apply(this, args);
    };

    return descriptor;
}

class Calculator {
    @log
    add(a: number, b: number): number {
        return a + b;
    }
}

const calculator = new Calculator();
calculator.add(2, 3);

命名空间和模块

TypeScript支持命名空间和模块化编程,帮助组织和管理代码:

typescript

复制

namespace MathUtility {
    export function add(a: number, b: number): number {
        return a + b;
    }
}

console.log(MathUtility.add(2, 3));

5. 工程化实践

配置tsconfig.json

tsconfig.json文件用于配置TypeScript编译器的行为:

json

复制

{
    "compilerOptions": {
        "target": "ES6",
        "module": "commonjs",
        "strict": true,
        "outDir": "./dist"
    },
    "include": ["src/**/*"]
}

使用ESLint和Prettier

集成ESLint和Prettier可以帮助你保持代码风格一致:

bash

复制

npm install eslint prettier eslint-plugin-prettier eslint-config-prettier @typescript-eslint/parser @typescript-eslint/eslint-plugin --save-dev

创建.eslintrc.js文件:

javascript

复制

module.exports = {
    parser: '@typescript-eslint/parser',
    extends: [
        'plugin:@typescript-eslint/recommended',
        'plugin:prettier/recommended',
    ],
    parserOptions: {
        ecmaVersion: 2020,
        sourceType: 'module',
    },
    rules: {
        // 自定义规则
    },
};

6. 性能优化

减少编译时间

  • 使用incremental选项启用增量编译。

  • 使用project references将大型项目拆分为多个子项目。

优化运行时性能

  • 避免使用any类型,尽量使用明确的类型。

  • 使用readonlyconst来避免不必要的可变性。

7. 实战案例

构建一个简单的REST API

使用Express和TypeScript构建一个简单的REST API:

typescript

复制

import express, { Request, Response } from 'express';

const app = express();
app.use(express.json());

interface User {
    id: number;
    name: string;
}

let users: User[] = [];

app.get('/users', (req: Request, res: Response) => {
    res.json(users);
});

app.post('/users', (req: Request, res: Response) => {
    const user: User = req.body;
    users.push(user);
    res.status(201).json(user);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

8. 总结与进阶

通过本文的学习,你应该已经掌握了TypeScript的基础知识和高级特性,并能够在实际项目中应用这些知识。要成为一名TypeScript高手,还需要不断实践和深入学习,掌握更多的设计模式、性能优化技巧和工程化实践。

92 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传