Skip to content

TypeScript 变量声明

在 TypeScript 中,我们使用 letconst 关键字来声明变量。这与现代 JavaScript (ES6) 的做法一致。var 关键字虽然仍然可用,但通常不推荐使用,因为它存在一些作用域问题。

1. 使用 let 声明变量

let 用于声明一个块级作用域的局部变量。这意味着变量只在声明它的代码块(例如,if 语句、for 循环或函数体)内有效。

typescript
let count: number = 10;

if (count > 5) {
    let message: string = "Count is greater than 5"; // message 只在 if 块内有效
    console.log(message);
}

// console.log(message); // Error: Cannot find name 'message'.

使用 let 声明的变量,其值可以被修改。

typescript
let age: number = 25;
age = 26; // OK

2. 使用 const 声明常量

const 用于声明一个块级作用域的常量。常量在声明时必须被初始化,并且其值一旦被赋值后就不能再改变。

typescript
const pi: number = 3.14159;
// pi = 3.14; // Error: Cannot assign to 'pi' because it is a constant.

const 声明指的是变量引用的值不可变。如果常量是一个对象或数组,你不能重新给它赋值,但可以修改对象或数组内部的属性或元素。

typescript
const person = {
    name: "Alice",
    age: 30
};

// 修改对象的属性是允许的
person.name = "Bob"; // OK

// 但重新赋值整个对象是不允许的
// person = { name: "Charlie", age: 40 }; // Error

const numbers: number[] = [1, 2, 3];

// 修改数组的元素是允许的
numbers.push(4); // OK

// 但重新赋值整个数组是不允许的
// numbers = [5, 6, 7]; // Error

3. 类型注解 (Type Annotation)

TypeScript 允许你在声明变量时显式地指定其类型,这称为“类型注解”。语法是在变量名后加上冒号 (:) 和类型名。

typescript
let myName: string = "John Doe";
let myAge: number = 42;
let isStudent: boolean = false;

类型注解是可选的。如果你在声明变量的同时进行了初始化,TypeScript 会使用类型推断来自动确定变量的类型。

typescript
let city = "New York"; // TypeScript 推断 city 的类型为 string
let year = 2024;      // TypeScript 推断 year 的类型为 number

尽管类型推断很方便,但在以下情况下,显式地添加类型注解是很好的实践:

  • 当一个变量没有被立即初始化时。
  • 当函数返回值的类型不明显时。
  • 当你希望代码的意图更加清晰明确时。

变量作用域 (Scope)

作用域决定了代码中哪些区域可以访问一个变量。

  • 块级作用域 (Block Scope): 使用 letconst 声明的变量具有块级作用域。它们只在最近的包含代码块({...})内有效。
  • 函数作用域 (Function Scope): 使用 var 声明的变量具有函数作用域。它们在整个函数内部都是可见的,无论在哪个代码块中声明。
  • 全局作用域 (Global Scope): 在所有函数和代码块之外声明的变量具有全局作用域,在代码的任何地方都可以访问。
typescript
let globalVar = "I am global";

function myFunction() {
    let functionVar = "I am in a function"; // 函数作用域

    if (true) {
        let blockVar = "I am in a block"; // 块级作用域
        console.log(blockVar);
        console.log(functionVar);
        console.log(globalVar);
    }

    // console.log(blockVar); // Error: blockVar is not defined here
}

myFunction();

本站内容仅供学习和研究使用。