当前位置: 首页 > article >正文

js数据类型与ts数据类型

JavaScript 和 TypeScript 的数据类型有些相似,但 TypeScript 在 JavaScript 的基础上添加了静态类型检查和更多的类型系统特性。下面是两者的对比:

1. JavaScript 数据类型

JavaScript 有 7 种基本数据类型:

  • 原始类型(Primitive types):

    • Number: 数字类型(包括整数和浮点数)。
    • String: 字符串类型。
    • Boolean: 布尔值(truefalse)。
    • Null: 表示“无”或“空”值。
    • Undefined: 未定义,通常是没有赋值的变量。
    • Symbol: 新增于 ES6,表示唯一的值,用于对象属性的唯一标识。
    • BigInt: 用于表示任意精度的整数(ES11 引入)。
  • 引用类型(Reference types):

    • Object: 对象类型,包括数组、函数、普通对象等。
    • Array: 数组类型(数组也是对象的一种形式)。
    • Function: 函数类型。

2. TypeScript 数据类型

TypeScript 继承了 JavaScript 的数据类型,同时增加了静态类型检查和更多的类型系统功能。TypeScript 的类型分为两大类:基本类型高级类型
在这里插入图片描述

基本数据类型:
  • number: 表示数值类型(包括整数、浮点数、BigInt 的类型)。
  • string: 表示字符串类型。
  • boolean: 布尔值类型。
  • null: 表示“无”或“空”值。
  • undefined: 表示未定义的变量类型。
  • symbol: 符号类型,用于创建唯一的标识符。
  • bigint: 用于表示大整数类型。

这些基本类型与 JavaScript 中的原始类型基本一致。

高级类型:
  • 数组类型:使用 type[]Array<type> 来定义数组类型。

    let numbers: number[] = [1, 2, 3]; // 或者 let numbers: Array<number> = [1, 2, 3];
    
  • 元组类型:允许数组中的元素类型不同。

    let tuple: [string, number] = ['hello', 42];
    
  • 枚举类型enum 用于定义一组命名的常量。

    enum Color {
      Red,
      Green,
      Blue
    }
    let c: Color = Color.Green;
    
  • Any 类型:可以赋值为任意类型,不进行类型检查。用于处理动态内容,但不推荐滥用。

    let anything: any = 42;
    anything = 'Hello';
    anything = true;
    
  • Void 类型:表示没有返回值的函数的返回类型。

    function log(message: string): void {
      console.log(message);
    }
    
  • Never 类型:表示永远不会发生的类型,常用于函数抛出异常或陷入无限循环的情况。

    function throwError(message: string): never {
      throw new Error(message);
    }
    
  • Object 类型:表示所有非原始类型。

    let obj: object = { name: "Alice" };
    
  • Union 类型:允许一个变量是几种类型中的一种。

    let value: string | number = 42;
    value = 'Hello';
    
  • Intersection 类型:组合多个类型,表示同时符合多个类型的要求。

    interface Person {
      name: string;
    }
    
    interface Employee {
      id: number;
    }
    
    type EmployeePerson = Person & Employee;
    
  • Literal 类型:表示特定的值。

    let direction: 'up' | 'down' = 'up';
    
  • Type Alias:为类型创建别名。

    type StringOrNumber = string | number;
    let value: StringOrNumber = 'Hello';
    value = 42;
    
  • Interface:用于定义对象的形状,可以扩展其他接口,支持继承。

    interface Person {
      name: string;
      age: number;
    }
    
特殊数据类型:
  • Unknown 类型:类似于 any,但在赋值给其他变量之前,必须进行类型检查。
    let unknownValue: unknown = 42;
    if (typeof unknownValue === 'number') {
      let num: number = unknownValue; // 现在可以安全使用
    }
    

总结:

  • JavaScript 数据类型是动态的,通常没有强制的类型检查。
  • TypeScript 扩展了 JavaScript 的类型系统,允许开发者在编译时发现类型错误,并且支持类型推断、静态类型检查以及更复杂的类型特性(如泛型、接口、联合类型等)。

TypeScript 提供了更加严格的类型系统,可以帮助你在编写代码时避免类型错误,提高代码的可维护性和可读性。


http://www.kler.cn/a/543149.html

相关文章:

  • 网络工程师 (30)以太网技术
  • 【DuodooBMS】开源软件:利他也能赚钱,开源MES就是好例子
  • MySQL 索引失效案例:字符集不匹配的隐蔽影响
  • 为什么mysql默认RR(repeat read可重复读)隔离级别
  • 前端【技术方案】浏览器兼容问题(含解决方案、CSS Hacks、条件注释、特性检测、Polyfill 等)
  • Unity底层C#处理机制深度解析
  • 《深度学习》——pytorch简介和安装
  • Unity中自定义协程的简单实现
  • 对贵司需求的PLC触摸的远程调试的解决方案
  • 蓝桥杯备赛笔记(二)
  • 初阶c语言(while循环二分法)
  • 桥接模式——C++实现
  • 深度整合DeepSeek:智能化搭建企业帮助中心
  • 关于uniapp使用pinia持久化配置兼容问题
  • WPF 设置宽度为 父容器 宽度的一半
  • 2.【线性代数】——矩阵消元
  • 笔记3——字符串和编码
  • 趣味魔法项目 LinuxPDF —— 在 PDF 中启动一个 Linux 操作系统
  • CSS 怎么实现样式隔离?
  • LVS作业
  • 使用Kafka Streams构建实时数据流处理系统:从基础到实践
  • 视频基础操作
  • 【进阶】JVM篇
  • MapboxGL加载离线字体
  • Android开发获取缓存,清理缓存工具类
  • 如何使用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天