TypeScript的基本用法

October 27, 2024

TypeScript 是 JavaScript 的超集,它添加了类型支持,可以帮助开发者在编写代码时获得更好的提示和报错机制。下面是学习 TypeScript 的基本步骤和一些重要概念。

目录

  1. 什么是 TypeScript?
  2. 安装 TypeScript
  3. 基础语法
  4. 类型系统
  5. 接口与类型
  6. 类与继承
  7. 泛型
  8. 模块与命名空间
  9. 编译配置 (tsconfig)
  10. 实战示例

什么是 TypeScript?

TypeScript 是一种为 JavaScript 添加了静态类型检查的编程语言,编译后可以生成标准的 JavaScript 文件。它的主要优点是:

  • 提供更强的类型支持,减少运行时错误。
  • 支持面向对象编程特性,如类、接口、泛型等。
  • 兼容所有 JavaScript 库和代码。

安装 TypeScript

安装 Node.js 和 npm

TypeScript 依赖于 Node.js。确保你已经安装了 Node.js 和 npm。


    # 检查 Node.js 和 npm 是否已安装
    node -v
    npm -v

安装 TypeScript

在命令行中运行以下命令来安装 TypeScript:


    npm install -g typescript

编译 TypeScript 文件

创建一个名为 index.ts 的文件,然后运行以下命令将其编译为 JavaScript:


    tsc index.ts

基础语法

变量声明

TypeScript 使用 letconst 关键字来声明变量:


    let name: string = 'John';
    const age: number = 30;

基本类型

常见的类型有:stringnumberbooleanarraytupleenumany 等。


    let isDone: boolean = false;
    let decimal: number = 6;
    let color: string = 'blue';
    let list: number[] = [1, 2, 3];
    let tuple: [string, number] = ['hello', 10];

类型系统

类型注解

TypeScript 允许在变量声明时为变量指定类型。


    let username: string = 'Alice';

类型推断

当你不给变量指定类型时,TypeScript 会根据赋值内容进行类型推断。


    let count = 5;  // count 的类型自动被推断为 number

联合类型

联合类型可以表示多种类型的值。


    let identifier: string | number;
    identifier = 'ABC123';
    identifier = 123;

接口与类型

接口

接口用于定义对象的结构。


    interface Person {
        name: string;
        age: number;
        greet(): void;
    }

    const person: Person = {
        name: 'Alice',
        age: 25,
        greet() {
            console.log('Hello!');
        }
    };

类型别名

类型别名和接口类似,但它们可以用于任何类型。


    type ID = string | number;
    let userId: ID;

类与继承

TypeScript 支持 ES6 类,并且可以使用访问修饰符(publicprivateprotected)控制属性的访问权限。


    class Animal {
        constructor(public name: string) {}
        
        move(distance: number) {
            console.log(`${this.name} moved ${distance}m.`);
        }
    }

    class Dog extends Animal {
        bark() {
            console.log('Woof! Woof!');
        }
    }

泛型

泛型提供了在编写函数、接口或类时传递类型参数的功能,以便重用代码。


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

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

模块与命名空间

模块是将代码划分为多个文件的方式,可以更好地管理代码。


    // utils.ts
    export function add(a: number, b: number): number {
        return a + b;
    }

    // main.ts
    import { add } from './utils';
    console.log(add(2, 3));

编译配置 (tsconfig)

在项目根目录创建 tsconfig.json 文件以配置 TypeScript 编译选项:


    {
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "strict": true
    }
    }

运行 tsc 时会自动读取 tsconfig.json 中的配置。

实战示例

创建一个简单的类型安全函数

以下是一个类型安全的计算函数示例:


    function calculateArea(width: number, height: number): number {
        return width * height;
    }

    console.log(calculateArea(5, 10));  // 输出:50