TypeScript 将你喜爱的 JavaScript 结合了一点类型安全、一点高级功能,以及大量开发者的安心。以下是你可能想尝试的原因:

  • 比你说“未定义不是函数”更快地捕捉错误
  • IDE 超能力:自动补全如虎添翼
  • 重构不再是噩梦
  • 与现有的 JavaScript 代码 100% 兼容(无需舍弃现有代码)

TypeScript vs JavaScript:对决

让我们直奔主题,看看 TypeScript 如何与我们熟悉的 JavaScript 不同:

1. 静态类型:游戏规则改变者

在 JavaScript 中,你可能会这样写:


let name = "John";
let age = 30;
age = "thirty"; // JavaScript: "没问题。" 🔥

而 TypeScript 则让你保持诚实:


let name: string = "John";
let age: number = 30;
age = "thirty"; // TypeScript: "不行!" 🛑

2. 接口:对象的蓝图

TypeScript 引入了接口,就像是对象的合同:


interface User {
    name: string;
    age: number;
    favoriteColor?: string; // 可选属性
}

const user: User = { name: "Alice", age: 25 }; // 一切正常!
const invalidUser: User = { name: "Bob" }; // TypeScript: "Bob,年龄呢?" 🧐

3. 类的进阶

虽然 JavaScript 有类,TypeScript 将其提升到一个新水平:


class Dog {
    constructor(public name: string, private age: number) {}

    bark() {
        console.log(`${this.name} 说汪!`);
    }
}

const rex = new Dog("Rex", 3);
rex.bark(); // "Rex 说汪!"
console.log(rex.age); // TypeScript: "这是私人信息!" 🕵️

TypeScript 入门:快速指南

准备好尝试 TypeScript 吗?以下是如何开始:

1. 安装:简单部分

打开终端并输入:


npm install -g typescript

搞定!你已经完成了一半。

2. 配置:有趣的部分

创建一个 TypeScript 配置文件:


tsc --init

这会创建一个 tsconfig.json 文件。它就像一个游乐场,你可以随心所欲地调整 TypeScript。

3. 你的第一个 TypeScript 文件

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


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

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

4. 编译:神奇时刻

运行以下命令:


tsc hello.ts

瞧!你现在有一个可以用 Node.js 运行的 hello.js 文件。

静态类型的力量:防止捂脸时刻

静态类型就像一个非常挑剔的朋友,总是指出你的错误。烦人吗?有时。实用吗?绝对。

捕捉愚蠢的错误


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

calculateArea(5, "10"); // TypeScript: "好尝试,但 'string' 不是 'number'" 🙅‍♂️

明确你的意图


interface Rectangle {
    width: number;
    height: number;
}

function calculateArea(rect: Rectangle): number {
    return rect.width * rect.height;
}

const myRect = { width: 10, height: 5 };
console.log(calculateArea(myRect)); // TypeScript: "我懂你" 👍

接口和类型:你的新好朋友

TypeScript 中的接口和类型就像代码组织的动态二人组。它们帮助你为数据创建清晰、可重用的结构。

接口:蓝图制造者


interface Product {
    id: number;
    name: string;
    price: number;
    inStock?: boolean;
}

const laptop: Product = {
    id: 1,
    name: "SuperLaptop",
    price: 999.99,
    inStock: true
};

function displayProduct(product: Product) {
    console.log(`${product.name} - $${product.price}`);
}

displayProduct(laptop); // TypeScript: "看起来不错!" 👌

类型:形状变换者


type ID = number | string;

function processId(id: ID) {
    if (typeof id === "string") {
        console.log(id.toUpperCase());
    } else {
        console.log(id.toFixed(2));
    }
}

processId("abc123"); // ABC123
processId(12345); // 12345.00

模块和迁移:将 TypeScript 带入你的 JavaScript 世界

将 TypeScript 集成到现有的 JavaScript 项目中不必是一次性的大变革。你可以逐步进行,逐个文件地迁移。

导出和导入:TypeScript 方式


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

// app.ts
import { add } from './mathUtils';
console.log(add(5, 3)); // 8

迁移现有的 JavaScript

首先将你的 .js 文件重命名为 .ts。即使有错误,TypeScript 仍会编译它们。然后,逐步添加类型注释并修复错误。

在你的 tsconfig.json 中添加以下内容以允许 JavaScript 文件:


{
  "compilerOptions": {
    "allowJs": true,
    "checkJs": true
  }
}

你每天都会用到的 TypeScript 类型

以下是你最常用的一些类型的快速概述:

原始类型:构建块


let isAwesome: boolean = true;
let meaningOfLife: number = 42;
let greeting: string = "Hello, TypeScript!";

数组和元组:有序集合


let fibonacci: number[] = [1, 1, 2, 3, 5, 8];
let person: [string, number] = ["Alice", 30]; // 元组

枚举:分类器


enum Color {
    Red,
    Green,
    Blue
}

let favoriteColor: Color = Color.Blue;

总结:为什么 TypeScript 值得你花时间

那么,为什么你作为 JavaScript 开发者应该关心 TypeScript?以下是简要总结:

  • 尽早且频繁地捕捉错误
  • 编写更易维护的代码
  • 享受更好的工具和 IDE 支持
  • 为你的技能做好未来准备(TypeScript 将长期存在)

TypeScript 不仅仅是一个趋势;它是一个强大的工具,可以让你的开发体验更顺畅,代码更健壮。当然,它有一个学习曲线,但回报是值得的。而且,你可以保留所有的 JavaScript 知识——这是一种双赢!

准备好尝试 TypeScript 吗?从小处开始,也许是一个小项目或现有代码库中的一个模块。在不知不觉中,你可能会发现自己在想,没有它你是怎么活下来的。

记住,TypeScript 不是要取代 JavaScript;而是要增强它。就像给你心爱的 JavaScript 增加超能力。所以,去吧,拥抱类型,让你的代码永远没有 bug!

“任何可以用 JavaScript 编写的应用程序,最终都会用 JavaScript 编写。” – 阿特伍德定律

也许是时候加上一句:“……然后重构为 TypeScript!” 😉

编码愉快,欢迎来到 TypeScript 的世界——我们有静态类型的饼干!🍪