返回 导航

其他

hangge.com

TypeScript - 基本介绍以及与JavaScript对比(附:声明变量方式)

作者:hangge | 2026-07-28 08:55
    TypeScript 是由微软开发的开源编程语言,它是 JavaScript 的超集,在 JavaScript 的基础上增加了静态类型检查、类、接口等特性。本文将介绍 TypeScript 的基本概念、与 JavaScript 的主要区别,以及如何在 TypeScript 中声明变量。 

 

1,JavaScript 的现状与问题

(1)JavaScript 是目前最流行的编程语言之一,广泛应用于各个领域。Stack Overflow 的创立者之一 Jeff Atwood 曾提出著名的 Atwood 定律:"任何可以使用 JavaScript 实现的应用最终都会使用 JavaScript 实现"。我们可以看到这句话正在逐步成为事实:
  • Web 开发JavaScript 一直是前端开发的核心语言
  • 移动端开发:通过 React NativeWeexuni-app 等框架实现跨平台开发
  • 小程序开发:微信小程序、支付宝小程序等都使用 JavaScript
  • 桌面应用:可以使用 Electron 开发跨平台桌面应用程序
  • 服务端开发:在 Node.js 环境下进行服务器端开发

(2)然而,JavaScript 也存在一些问题,其中最主要的是缺少类型约束。由于历史因素,JavaScript 在语言设计方面存在一些缺陷:
  • ES5 及之前版本中使用的 var 关键字存在作用域问题
  • 最初 JavaScript 设计的数组类型并不是连续的内存空间
  • 直到今天,JavaScript 也没有加入类型检测这一机制,这会影响开发者的编码效率和代码质量

(3)在编程开发中,有一个共识:错误越早发现,就越容易解决。JavaScript 由于缺少类型约束,只能在运行时发现错误,这会带来以下问题:
  • 调用函数时传入错误类型的参数,IDE 不会提示报错
  • 代码运行后才发现错误,可能导致整个项目崩溃
  • 开发大型项目时,缺少类型约束会带来很多安全隐患

2,TypeScript 是什么

(1)TypeScript 是微软在 2012 年开发的开源编程语言,它是 JavaScript 的超集,在 JavaScript 的基础上增加了类型系统。TypeScriptGitHub 和其官方网站上的定义如下:
  • GitHubTypeScript is a superset of JavaScript that compiles to clean JavaScript output
  • 官方网站TypeScript is a typed superset of JavaScript that compiles to plain JavaScript

(2)更通俗易懂的理解是:TypeScriptJavaScript 的超集,它带有类型并编译出干净的 JavaScript 代码。TypeScript 具有以下特点:
  • 始于 JavaScript,归于 JavaScriptTypeScriptJavaScript 开发者熟悉的语法和语义开始,可以编译出纯净、简洁的 JavaScript 代码,可以在任何浏览器、Node.js 环境中运行
  • 强大的工具支持TypeScript 的类型系统允许开发者使用高效的开发工具,比如静态检查和代码重构
  • 支持最新的 JavaScript 特性TypeScript 提供最新的和不断发展的 JavaScript 特性,包括 ES6ES7ES8 以及未来提案中的特性

(3)目前,TypeScript 已经在很多地方被广泛应用:
  • Vue.js 3 已使用 TypeScript 进行重构,98.3% 的代码使用 TypeScript 编写
  • Angular 从项目初期就采用 TypeScript 进行开发
  • 最流行的编辑器 VS Code 也是使用 TypeScript 编写的
  • Element PlusAnt DesignUI 库也是使用 TypeScript 编写的
  • 微信小程序开发也支持使用 TypeScript 编写

3,TypeScript 与 JavaScript 的区别

(1)TypeScriptJavaScript 最显著的区别在于类型系统。下面我们从多个维度对两者进行对比:
对比项 JavaScript TypeScript
类型系统 动态类型,运行时确定类型 静态类型,编译时确定类型
类型检查 无类型检查,运行时才发现错误 编译时进行类型检查,提前发现错误
编译执行 解释型语言,浏览器直接执行 需要编译为 JavaScript 后执行
IDE 支持 有限的代码提示和重构支持 强大的代码补全、重构和错误检测
学习曲线 入门简单 需要学习类型系统,有一定门槛
适用场景 小型项目、快速原型开发 大型项目、团队协作开发

(2)从执行流程来看,JavaScript 是解释型语言,代码可以直接在浏览器中运行。而 TypeScript 需要先通过编译器(tsc)将 .ts 文件编译成 .js 文件,然后再由浏览器或 Node.js 执行。
提示TypeScript 编译后的代码是纯净的 JavaScript,不存在兼容性问题,不需要依赖 Babel 等工具。

(3)从类型约束来看,JavaScript 是弱类型语言,变量可以随时被赋予任何类型的值。而 TypeScript 要求在声明变量时指定类型(或通过类型推导),如果赋值类型不匹配,编译时就会报错。这种机制可以帮助开发者在编码阶段就发现潜在的类型错误。

附:声明变量的方式

1,声明变量的格式

(1)在 TypeScript 中定义变量时,需要指定标识符的类型。下面代码声明了一个名为 message 的变量,类型为 string,初始值为 "Hello World"。
注意string 是小写的,它与 String 有区别。stringTypeScript 中定义的字符串类型,StringECMAScript 中定义的一个包装类。
// 格式:var/let/const 标识符: 数据类型 = 赋值;

// 示例:声明一个字符串类型的变量
let message: string = "Hello World";

(2)如果为已声明类型的变量赋其他类型的值,TypeScript 会在编译时报错。这种类型检查机制可以帮助我们在编码阶段就发现类型错误,避免在运行时出现意外的问题。
let message: string = "Hello World";

// 错误:不能将 number 类型赋值给 string 类型
message = 123;  // Type 'number' is not assignable to type 'string'.

2,声明变量的关键字

(1)在 TypeScript 中定义变量的方法与 ES6 及之后的版本一致,可以使用 varletconst 关键字:
var myname: string = "hangge";
let myage: number = 88;
const myheight: number = 1.88;

(2)在 TypeScript 中,不建议使用 var 关键字,主要原因如下:
  • ES6 之后引入 letconst 来取代 var
  • let 声明的变量具有块级作用域,而 var 声明的变量没有块级作用域,容易引起一些问题
  • TypeScript 中使用 letconst 声明变量是更加安全、可靠的做法

(3)letconst 的区别:
  • let:声明一个可以重新赋值的变量
  • const:声明一个常量,声明后不能重新赋值(但对于对象和数组,其内部属性可以修改)

3,变量的类型推导

(1)在 TypeScript 中,有时候不必为每个变量显式声明类型,TypeScript 会根据初始值自动推断变量的类型:
提示:类型推导可以减少代码的编写量,同时在保持类型安全的前提下提供更好的开发体验。在实际开发中,如果变量的类型可以从初始值明确推断出来,通常可以省略类型声明。
// TypeScript 会自动推断 message 的类型为 string
let message = "Hello World";

// 等价于:
// let message: string = "Hello World";
  • 由于 TypeScript 进行了类型推导,如果后续尝试将 message 赋值为其他类型的值,同样会报错。
let message = "Hello World";  // 自动推导为 string 类型

// 错误:不能将 number 类型赋值给 string 类型
message = 123;  // Type 'number' is not assignable to type 'string'.

(2)类型推导在声明常量时同样有效:
const count = 100;     // 自动推导为 100(字面量类型)
const name = "hangge";  // 自动推导为 "hangge"(字面量类型)
评论

全部评论(0)

回到顶部