首页 > 其他分享 >ts_01_数据类型

ts_01_数据类型

时间:2024-05-23 15:40:56浏览次数:10  
标签:01 string enum 数据类型 ts 枚举 let 类型 null

/**
 * typeScript 学习1 数据类型
 *  number    数字类型
 *  string    字符串类型
 *  boolean   布尔类型
 *  Array     数组
 *  Tuple     元组
 *  enum      枚举
 *  Any       任意类型
 *  void      无任何类型
 *  null      空类型
 *  undefined 未定义类型
 *  never     永远不存在值的类型
 * `unknown   未知类型
 *  Symbols   符号
 *  object    非原始类型 (非 number,string,boolean,symbol,null,undefined)
 *
 * 请将 strictNullChecks 设置成立 false
 */

/**
 * 数字类型 number
 *  0x  十六进制
 *  0o  八进制
 *  0b  二进制
 */
let decLiteral:Number = 10;
let hexLiteral: number = 0xf00d;   // 十六
let binaryLiteral: number = 0b1010;// 二
let octalLiteral: number = 0o744;  // 八

/**
 * 布尔类型 boolean
 *  布尔类型值 只能是 false || true
 */
let isBoolen:boolean = false;      // 布尔类型

/**
 * 字符串类型 string
 *  ''  单引号  let str_1: string = "单引号,定义字符串";
 *  ""  双引号  let str_1: string = "双引号,定义字符串";
 *  ``  反引号  let str_3: string = `反引号, 定义模板字符串,里面可以 ${0-0} 引用变量或进行运算`;
 */
let str:string = '字符串'
/**
 * 数组类型 Array
 * 名称: 数据类型[]               元素类型后接[]
 * 名称: Array<数据类型>          泛型数组             let arr_2: Array<number> = []
 * 名称:readonlyArray<数据类型>  只读数组
 */
let num_arr1: number[] = [];
let num_arr2: Array<number> = []; // 泛型数组\

/**
 * 元组类型 Tuple
 *  名称: [类型1,类型2,...] = [对应类型1的值,对应类型2的值]
 *  元组类型的变量,在创建的时候,就确定了,有多少个元素和每个元素的元素类型。
 *  ts 官方文档说 越界添加元素 会使用联合类型(number | string)代替,但是在 vscode 实验的时候会直接报错
 */
let tuple: [number, string, boolean?] = [0, '元组'];// 元组

/**
 * 枚举类型 enum
 *  数字枚举    enum enum_1{a, b=2, c, d=a,e = getValue()}       数字枚举,如果第一位没有赋值 则以0为初始值,后续未赋值元素以前一位元素的值自增1
 *  字符枚举    enum enum_2{a="a", b=a}                          字符枚举, 每个属性都需要初始化
 *  异构枚举    enum enum_3{a,b=2}                               异构枚举, 同时使用字符枚举和数字枚举,不推荐使用,字符串枚举后的一个成字段必须赋值
 *  常量枚举    const enum enum_5{}                              常量枚举,编译后不会产生对象
 *
 *  枚举中的每个字段都有一个值,这个值可以是常量、计算出的结果(只有数字枚举可用)、另一个枚举成员(字符串枚举中,这个枚举成员指的是同一个枚举中不同的成员)
 *  数字枚举,中的某个字段使用了计算值或常量,那么紧接其后的那个字段必须设置初始值
 *  字符枚举,中不能使用常量、计算值作为字段的值
 *  枚举成员类型,如果枚举中所有成员都是字面量类型的值(字面量类型是js提供的一个准确变量: let a:"hello" = "hello"),那么枚举成员和枚举值本身就可以作为类型来使用
 *    * 没有初始值的枚举成员
 *    * 值为字符串字面量
 *    * 值为数值字面量,或者带有-符号的数值字面量
 *  联合枚举类型,当枚举值符合条件时,这个枚举值就可以看做是一个包含所有成员的联合类型
 *  
 *  反向映射,枚举中存在反向映射,即 可用通过枚举成员查找枚举值,也可以使用枚举值查找枚举成员
 *  枚举合并:枚举的成员可用分开声明
 *
 *  枚举在js中的实现:
 *    let Enum;
 *    (function(Enum) {
 *      Enum[Enum['A'] = 0] = "A";  
 *    })(Enum || (Emum = {}));
 */
enum Color {Red, Green, Blue}; // 枚举类型
let c:Color = Color.Red;

/**
 * Any 类型
 *  无法确认变量是什么类型的时候可以设置成any类型
 *  ts中对 any 类型没有进行类型检查,所以 any 可以赋值为任意类型,且可以访问任意属性和方法
 *  定义变量时未指定类型会被编译成any类型
 */
let notSure:any = 4; // any 允许 编译时可选择地包含或移除类型检查。与 Object有相似 但是可以调用方法
notSure.toFixed()
let anyList: any[] = [1,'1',Color.Red]


/**
 * void 类型
 *  void 类型与 any 类型,刚好相反 void 类型表示没有任何类型, 一般用于没有返回值的函数
 *  void 类型的变量 只能赋值 undefined 和 null
 */
const returnVoid = ():void => {}
let unusable: void =  null || undefined;

/**
 * Null类型 和 Undefined类型
 * undefined和null的类型分别叫做undefined和null和void相似,它们的本身的类型用处不是很大
 * undefined 类型,表示 此处应当有值,但是现在没有
 * 默认下null和undefined是所有类型的子类型
 */
let u: undefined = undefined;
let n: null = null;

/**
 * never 类型
 *  never 类型,表示永不存在的值类型
 *  never类型是任何类型的子类型,也可以赋值给任何类型
 *  除了never本身之外,没有类型是never的子类型或可以赋值给never类型
 *  返回never的函数必须存在无法达到的终点(可以是 死循环,错误处理...)
 */
// 返回never的函数必须存在无法达到的终点
const error = (message: string) => { throw new Error(message) };

/**
 * unknown 类型
 *  unknown 类型,表示未知类型,可以被任何类型分配,不能分配给任何类型
 */
let unknownValue: unknown = '可以被任何类型分配,不能分配给任何类型';


/**
 * Object 类型
 *  除number,string,boolean,symbol,null或undefined之外的类型
 */
 declare function create(o: object | null): void;
//  create({prop: 0})


/**
 * Symbols 类型
 *  symbol类型的值是通过Symbol构造函数创建的
 *  symbol类型创建的变量具有唯一性,且不可以改变
 */
let symbol_0: symbol = Symbol("key");
let symbol_1: symbol = Symbol("key");
let str_4: string = "key"
let str_5: string = "key"
console.log(symbol_0 === symbol_1, str_4 === str_5); // -> false true


 /**
  * 类型断言
  *   as        关键字        let as_1: string = 1 as string;
  *   <>        尖括号        let as_2: string = <string>1;
  */
// let as_1:string = 1 as string; //
// let as_2: string = <string>1;


/**
 * let、var、const 的区别
 *  var 无 块级作用域,同一作用域下变量可重复定义,且只得到一个,而且存在变量提升
 *  let 有 块级作用域,同一作用域下变量不可重复定义
 *  const 用来声明 初始化后 值不会被修改的变量
 *  const 对于 对象 只检查这个对象的地址不会检查对象内部属性的修改
 *
 *  在 js 中变量存储主要有 堆内存,栈内存两种方式,栈内存主要存储各种变量和指向对象地址的指针, 堆内存主要负责像Object这种变量类型的存储
 */
for (var i = 0; i < 10; i++) {
  setTimeout(function() {
    console.log(i); // -> 10
  }, 100 * i);
}

for (let i = 0; i < 10; i++) {
  setTimeout(function() {
    console.log(i); // -> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  }, 100 * i);
}

const a = {
  name: "00"
}
// a = {}; // 会报错 因为 此处的 {} 是一个新的对象(地址变换了)
a.name = "xxx"; // 不会报错,因为 const 只保证 指针指向的地址不会变动,而对于属性的修改 是直接操作了 这个地址块对应的数据块中的数据,而没有修改地址

标签:01,string,enum,数据类型,ts,枚举,let,类型,null
From: https://www.cnblogs.com/tsuru/p/18208596

相关文章

  • 世微 AP5101C高压线性LED恒流驱动芯片 6-100V 2A LED灯电源驱动
    产品描述AP5101C是一款高压线性LED恒流芯片,简单、内置功率管,适用于6-100V输入的高精度降压LED恒流驱动芯片。电流2.0A。AP5101C可实现内置MOS做2.0A,外置MOS可做3.0A的。AP5101C内置温度保护功能,温度保护点为130度,温度达到130度时,输出电流慢......
  • 京东商家智能助手:Multi-Agents 在电商垂域的探索与创新
    电商助手是一款集合了多种电商经营决策功能的工具软件,旨在帮助电商从业者完成从商品发布到订单管理、客服沟通、数据分析等一系列电商运营任务。京东零售基于Multi-Agents理念搭建了商家助手大模型在线推理服务架构,这一系统的核心是算法层基于ReAct范式定制多个LLMAIAgent......
  • Archery 平台执行DDL error:Threads_connected exceeds its critical threshold
    在数据库管理平台Archery上定时任务执行DDL操作,第二天发现报错,报错信息如下:Errorcopyingrowsfrom`DB`.`TABLE_NAME`to`DB`.`_TABLE_NAME_new`:Threads_connected=1358exceedsitscriticalthreshold1300登录查看Threads_connected信息,Threads_connected一直处于大......
  • Windows 10 LTSC中个人版OneDrive失效的问题
    该问题是由于LTSC注册表无onedriver的id{A52BBA46-E9E1-435f-B3D9-28DAA648C0F6}定义导致,解决方案是新建一个reg_onedrive.reg文件,并编辑内容如下:WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescript......
  • 写一个Linux的 shell脚本删除目录 stud001~stud140 目录下的所有文件
    用户:在linux的shell脚本中写个循环,可以遍历目录stud001直到stud140,并将目录stud001到stud140目录中的内容全部删除。讯飞星火:在shell脚本中,我们可以使用for循环和rm命令来实现这个需求。以下是一个简单的示例:1#!/bin/bash2foriin$(seq-f"%03g"1140)3do4......
  • WooYun-2016-199433
    PhpmyadminScripts/setup.phpDeserializationVulnerability(WooYun-2016-199433)Affectedversion:2.xSetupcdvulhub/phpmyadmin/WooYun-2016-199433docker-composeup-dVisithttp://10.10.10.8:8080andyouwillseethephpmyadminhomepage.Becausetherei......
  • CVE-2018-12613
    phpmyadmin4.8.1RemoteFileInclusionVulnerability(CVE-2018-12613)PhpMyAdminisafreesoftwaretoolwritteninPHP,intendedtohandletheadministrationofMySQLovertheWeb.Thevulnerabilityisintheindex.php,causingfilesiclusionvulnerabili......
  • Testing Egineer note:2024_4_27-day01-part02
    肖sir__软件测试之计算机基础_1.2软件测试之计算机基础1.硬件:计算机的硬件是计算机的各种设备的总称,硬件分为五个部分:(1)运行器(cpu)(2)控制器(主板)(3)存储器(硬盘)机械硬盘和固态硬盘(4)输入设备(键盘,鼠标)(5)输出设备(显示器,音响)2、软件:当电脑启动时的应用程序,应用软件(腾讯,qq,有道......
  • 解决postgres数据库remaining connection slots are reserved for non-replication su
    来源:【小工具】-解决postgres数据库remainingconnectionslotsarereservedfornon-replicationsuperuserconnectio-CSDN博客psycopg2.OperationalError:FATAL:remainingconnectionslotsarereservedfornon-replicationsuperuserconnection报错信息Traceback......
  • [oeasy]python018_ 如何下载github仓库_git_clone_下载仓库
    继续运行......