📜  在 TypeScript 中声明变量有哪些不同的关键字?

📅  最后修改于: 2022-05-13 01:56:16.192000             🧑  作者: Mango

在 TypeScript 中声明变量有哪些不同的关键字?

Typescript 变量声明类似于 Javascript。每个关键字都有特定的范围。让我们在本文中了解变量声明。在 Typescript 中,可以使用以下关键字声明变量:

  • 变量
  • 常量

var 关键字:使用var声明变量 关键词。

var variable : number = 1;

var变量具有函数范围。它表明它们仅在它们形成的函数中可用,或者如果它们不是在函数中生成的,则它们是全局范围的。如果我在函数内部声明 var 然后尝试从函数外部调用它,它将函数。

number1是一个全局声明的数字。 number2具有它所在的函数的范围。 number3 ,即使它是在 if 循环中声明的,也可以在函数中访问它,因为它是使用 var 关键字声明的。

Javascript
var number1: number = 1;
  
function var_keyword() {
  var number2: number = 2;
  if (number1 + number2 == 3) {
    var number3: number = 3;
  }
  
  console.log(number1);
  console.log(number2);
  console.log(number3);
}
  
var_keyword();


Javascript
let number1: number = 1;
  
function let_keyword() {
  let number2: number = 2;
  if (number1 + number2 == 3) {
    let number3: number = 3;
  }
  
  console.log(number1);
  console.log(number2);
  console.log(number3); // Throws error
}
  
let_keyword();


Javascript
console.log(number1); // undefined
var number1: number = 1;
  
console.log(number2); // Throws error
let number2: number = 2;


Javascript
let student_name: string = "rachel";
let student_name: string = "john"; // Throws error


Javascript
const number1: number = 1;
  
function const_keyword() {
  const number2: number = 2;
  if (number1 + number2 == 3) {
    const number3: number = 3;
  }
  
  console.log(number1);
  console.log(number2);
  console.log(number3); // Throws error
}
  
const_keyword();


Javascript
// Variable cannot be reassigned 
const student_name: string = "rachel";
student_name = "john";


Javascript
// Can not redeclare variables
const student_name: string = "rachel";
const student_name: string = "john";


输出:

1
2
3

Let关键字:使用 关键词。

let variable : string = "geeksforgeeks";

let 变量是块作用域的与 var 关键字不同,它为整个函数全局声明一个变量,而不管块范围如何,let 关键字允许您定义限制在使用它的块语句或表达式的范围内的变量。

number1是一个全局声明的数字。 number2具有它所在函数的范围。 number3在 if 循环中声明,它只能在 if 循环中访问,它是块范围的,因为它是使用 let 关键字声明的。

Javascript

let number1: number = 1;
  
function let_keyword() {
  let number2: number = 2;
  if (number1 + number2 == 3) {
    let number3: number = 3;
  }
  
  console.log(number1);
  console.log(number2);
  console.log(number3); // Throws error
}
  
let_keyword();

输出:编译完ts文件后输出为:

error TS2552: Cannot find name 'number3'. Did you mean 'number2'?
console.log(number3); // Throws error

运行js文件后:

1
2
3

let 关键字优于 var 关键字的优点:

使用关键字 let 声明的变量在声明之前无法访问,在相同条件下 var 变量给出未定义的结果时会引发错误。

Javascript

console.log(number1); // undefined
var number1: number = 1;
  
console.log(number2); // Throws error
let number2: number = 2;

输出:

error TS2448: Block-scoped variable 'number2' used before its declaration.
   console.log(number2);  

使用 let 声明的变量不能重新声明。

Javascript

let student_name: string = "rachel";
let student_name: string = "john"; // Throws error

输出:

error TS2451: Cannot redeclare block-scoped variable 'student_name'.
   let student_name: string = "john";

const 关键字:使用const关键字声明变量。

const variable : number = 9;

常量变量是 块作用域。 常量,就像用 let 关键字声明的变量一样,是块作用域的。不能通过重新分配新值来修改常量的值,也不能重新声明具有相同名称的变量。

number1是一个全局声明的数字。 number2具有它所在函数的范围。 number3在 if 循环中声明,它只能在 if 循环中访问,它是块范围的,因为它是使用 const 关键字声明的。 const 关键字与 let 类似,但不同之处在于 const 变量不能重新分配,使用 let 声明的变量可以重新分配。

Javascript

const number1: number = 1;
  
function const_keyword() {
  const number2: number = 2;
  if (number1 + number2 == 3) {
    const number3: number = 3;
  }
  
  console.log(number1);
  console.log(number2);
  console.log(number3); // Throws error
}
  
const_keyword();

输出:编译完ts文件后输出为:

error TS2552: Cannot find name 'number3'. Did you mean 'number2'?
     console.log(number3); //error

运行js文件后:

1
2
3

使用 const 类型声明的变量不能重新分配或重新声明

示例:以下示例演示了不能重新分配变量。

Javascript

// Variable cannot be reassigned 
const student_name: string = "rachel";
student_name = "john";

输出:

error TS2588: Cannot assign to 'student_name' because it is a constant.
    student_name = "john";
    ~~~~~~~~~~~~

示例:下面的示例演示了不能重新声明变量。

Javascript

// Can not redeclare variables
const student_name: string = "rachel";
const student_name: string = "john";

输出:

error TS2451: Cannot redeclare block-scoped variable 'student_name'.
    const student_name: string = "john";