超快让你认识新宠儿“TS”

什么是 TypeScript

定义和背景

TypeScript 是由微软开发并维护的一种开源编程语言。它被称为 JavaScript 的超集,这意味着所有合法的 JavaScript 代码在 TypeScript 中同样合法。TypeScript 增加了静态类型、类和接口等特性,旨在提高代码的可维护性和可读性,特别是在大型项目中。TypeScript 的设计目标是让开发者能够在编写代码时发现潜在的错误,并且在使用现代 JavaScript 特性的同时能够更好地组织和管理代码。

安装和基本设置步骤

安装 TypeScript 很简单,只需使用 npm(Node 包管理器)即可。

  1. 安装 Node.js 和 npm 首先,需要确保你已经安装了 Node.js 和 npm。你可以从 Node.js 官方网站下载并安装。

  2. 安装 TypeScript 编译器 在命令行中运行以下命令来全局安装 TypeScript 编译器:

    npm install -g typescript
    
  3. 创建一个 TypeScript 文件 新建一个名为 hello.ts 的文件,并添加以下代码:

    javascript 复制代码
    function greet(name: string) {
        return `Hello, ${name}!`;
    }
    
    console.log(greet("World"));
  4. 编译 TypeScript 文件 使用 TypeScript 编译器将 hello.ts 编译为 JavaScript 文件:

    tsc hello.ts
    

    这将在同一目录下生成一个 hello.js 文件,内容如下:

    javascript 复制代码
    function greet(name) {
        return "Hello, " + name + "!";
    }
    
    console.log(greet("World"));

TypeScript 的主要特性

静态类型检查

TypeScript 的核心特性之一是静态类型检查。与 JavaScript 不同,TypeScript 可以在编译时检测类型错误,这有助于在早期发现并修复潜在的问题。

ini 复制代码
let isDone: boolean = false;
let age: number = 25;
let userName: string = "John";

基本类型、接口和类型别名

TypeScript 提供了多种基本类型以及定义复杂类型的机制。

  • 基本类型

    ini 复制代码
    let isDone: boolean = false;
    let age: number = 25;
    let userName: string = "John";
  • 接口 接口用于定义对象的结构。

    css 复制代码
    interface Person {
        firstName: string;
        lastName: string;
        age: number;
    }
    
    let user: Person = {
        firstName: "John",
        lastName: "Doe",
        age: 30
    };
  • 类型别名 类型别名用于给类型起一个新名字。

    ini 复制代码
    type StringOrNumber = string | number;
    
    let sample: StringOrNumber;
    sample = "Hello";
    sample = 123;

类和对象

TypeScript 支持面向对象编程,包括类和继承等特性。

typescript 复制代码
class Animal {
    name: string;

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

    move(distance: number = 0) {
        console.log(`${this.name} moved ${distance} meters.`);
    }
}

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

let dog = new Dog("Rex");
dog.bark();
dog.move(10);

模块和命名空间

模块和命名空间用于组织和封装代码。

  • 模块 模块是外部的,可以导入和导出。

    typescript 复制代码
    // utils.ts
    export function add(a: number, b: number): number {
        return a + b;
    }
    
    // main.ts
    import { add } from './utils';
    
    console.log(add(2, 3));
  • 命名空间 命名空间是内部的,用于逻辑分组。

    arduino 复制代码
    namespace Utility {
        export function log(message: string) {
            console.log(message);
        }
    }
    
    Utility.log("Hello, TypeScript!");

泛型

泛型用于创建可复用的组件。

ini 复制代码
function identity<T>(arg: T): T {
    return arg;
}

let output1 = identity<string>("myString");
let output2 = identity<number>(100);

异步编程支持

TypeScript 支持现代 JavaScript 的异步编程模式,包括 async/await 语法。

javascript 复制代码
function delay(ms: number) {
    return new Promise<void>(resolve => setTimeout(resolve, ms));
}

async function asyncCall() {
    console.log("Waiting...");
    await delay(1000);
    console.log("Done!");
}

asyncCall();

TypeScript 与 JavaScript 的区别

主要区别和优劣势对比

TypeScript 和 JavaScript 的主要区别在于类型系统。TypeScript 是强类型或静态类型的,而 JavaScript 是弱类型或动态类型的。

  • 静态类型: TypeScript 在编译时检查类型,发现错误。

    ini 复制代码
    let isDone: boolean = false;
    // isDone = 123; // Error: Type 'number' is not assignable to type 'boolean'
  • 动态类型: JavaScript 只有在运行时才会发现类型错误。

    ini 复制代码
    let isDone = false;
    isDone = 123; // No error until runtime

迁移 JavaScript 代码到 TypeScript 的方法和注意事项

将现有的 JavaScript 项目迁移到 TypeScript 可以逐步进行:

  1. 重命名文件 : 将 .js 文件重命名为 .ts 文件。

  2. 添加类型注解: 在代码中逐步添加类型注解。

    javascript 复制代码
    function greet(name: string) {
        return `Hello, ${name}!`;
    }
  3. 配置 TypeScript 编译器 : 创建一个 tsconfig.json 文件,配置 TypeScript 编译选项。

    json 复制代码
    {
        "compilerOptions": {
            "target": "es5",
            "module": "commonjs",
            "strict": true,
            "esModuleInterop": true
        }
    }
  4. 逐步引入类型检查 : 使用 any 类型逐步进行迁移,减少初期的编译错误。

    ini 复制代码
    let someValue: any = "this is a string";

编译器的工作原理和选项

TypeScript 编译器 (tsc) 将 TypeScript 代码编译为 JavaScript 代码,并支持多种编译选项。

  • 基本编译命令

    tsc filename.ts
    
  • 配置文件 (tsconfig.json) : 配置文件用于指定编译选项。

    json 复制代码
    {
        "compilerOptions": {
            "target": "es5",
            "module": "commonjs",
            "strict": true,
            "outDir": "./dist"
        },
        "include": ["src/**/*"]
    }

与常见框架和库的集成

TypeScript 与流行的 JavaScript 框架和库(如 React, Vue)紧密集成。

  • React : 使用 create-react-app 创建 TypeScript 项目。

    lua 复制代码
    npx create-react-app my-app --template typescript
  • Vue: Vue CLI 支持创建 TypeScript 项目。

    lua 复制代码
    vue create my-vue-app
相关推荐
m0_748247551 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php
m0_748255022 小时前
前端常用算法集合
前端·算法
真的很上进2 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
web130933203982 小时前
vue elementUI form组件动态添加el-form-item并且动态添加rules必填项校验方法
前端·vue.js·elementui
NiNg_1_2342 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
测试老哥3 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
如若1233 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~4 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语4 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport4 小时前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap