首页 > 其他分享 >TypeScript支持的数据类型(一)

TypeScript支持的数据类型(一)

时间:2023-01-08 22:56:58浏览次数:43  
标签:TypeScript const object unknown Object 数据类型 支持 类型 any

说明

TypeScript 做为JavaScript 的超集,对于JavaScript中的类型完全支持,除了JavaScript中的类型之外,TS自身也提供了一些数据类型。

在TS中,数据类型的整体结构如下:

  • 最顶级的类型,any 与 unknown
  • 特殊的 Object ,它也包含了所有的类型,但和 Top Type 比还是差了一层
  • String、Boolean、Number 这些装箱类型
  • 原始类型与对象类型
  • 字面量类型,即更精确的原始类型与对象类型,需要注意的是 null 和 undefined 并不是字面量类型的子类型
  • 最底层的 never

顶层类型

顶层类型主要包括anyunknown

any类型在ts中属于Top Type, 如果一个变量被标注为any类型,那么这个变量在进行赋值时,可以接受任意类型的数据,同时,any类型的数据也可以赋值给任意类型的变量。

// any
let val: any

val = true
val = 100
val = null
val = undefined

let val2: string = val
let val3: number = val
let val4: null = val
let val5: undefined = val
let val6: boolean = val

需要注意的是,any类型的特殊性导致我们经常较为随意的使用它,哪里出了问题,就随便any一下,用的多了,也就变成了AnyScript。

unknown类型同样属于顶层类型,一个被标注为unknown类型的变量可以被赋值为任意其他类型,但是unknown类型的数据只能赋值给any和unknown类型的变量。

// unknown
let val1: unknown = true
val1 = 100
val1 = undefined
val1 = null

let val2: unknown = val1
let val3: any = val1

如果想要对unknown类型的数据进行访问,需要通过类型断言。

例如:

let unknownVar: unknown;

(unknownVar as { foo: () => {} }).foo();

Object 类型

Object在JS中,位于原型链的顶端,所有的原始类型和对象类型都指向Object。

Object类型在TS中,和顶层的any类似,包含了所有类型的信息,但是却没有在top type中,位置仅次于Top Type。

// 对于 undefined、null、void 0 ,需要关闭 strictNullChecks
const tmp1: Object = undefined;
const tmp2: Object = null;
const tmp3: Object = void 0;

const tmp4: Object = 'hello,world';
const tmp5: Object = 100;
const tmp6: Object = { name: 'root' };
const tmp7: Object = () => {};
const tmp8: Object = [];

装箱类型

在TS中,Object、Boolean、Number、String、Symbol这些类型是TS中的装箱类型(Boxed Types)。每一个装箱类型都包括对应的拆箱类型(Unboxed Types)和一些超出预期的值。

这里以装箱类型Number为例,包括拆箱类型number, 以及超预期值undefined、null、void等(在strictNullChecks为false的情况下)。

大多数情况下,都不应该直接使用装箱类型。

这里需要关注一下object类型,object类型的引入就是为了解决对 Object 类型的错误使用,它代表所有非原始类型的类型,即数组、对象与函数类型这些:

const tmp17: object = undefined;
const tmp18: object = null;
const tmp19: object = void 0;

const tmp20: object = 'root';  // X 不成立,值为原始类型
const tmp21: object = 100; // X 不成立,值为原始类型

const tmp22: object = { name: 'root' };
const tmp23: object = () => {};
const tmp24: object = [];

同时,我们也要避免使用{}对象直接量这种形式,{}意味着任何非 null / undefined 的值,从这个层面上看,使用它和使用 any 差不多。

当设置一个变量的时候,如果已经确定不是原始类型,可以使用object。除了设置为object,还可以使用Record<string, unknown>或者Record<string, any>表示对象,unknown[]或者any[]表示数组,(...args: any[]) => any 表示函数。

字面量类型

字面量类型是所有拆箱类型的子类型,属于比原始类型更加精确的数据类型,属于原始类型的子类型。

字面量类型主要包括字符串字面量、数字字面量类型、布尔字面量类型和对象字面量类型。

当一个常量被赋值为字面量的值时,这个常量的类型就为字面量类型。

image

单独使用字面量类型比较少见,较为常见的是联合类型和字面量类型结合使用。

image

never

在TS中,never类型表示什么都没有, 甚至不包括空的类型。never类型本身并不会携带任何信息,所以在TS中属于Bottom Type。和null 和 undefined 一样,属于其他类型的子类型,但只有 never 类型的变量能够赋值给另一个 never 类型变量。

一般来说,它主要被类型检查所使用,有时,never类型常用来当做一个抛出错误的函数返回值。

例如:
image

一个返回值类型为 never 的函数被调用,那么下方的代码都会被视为无效的代码(即无法执行到):

function justThrow(): never {
  throw new Error()
}

function foo (input:number){
  if(input > 1){
    justThrow();
    // 等同于 return 语句后的代码,即 Dead Code
    const name = "root";
  }
}

标签:TypeScript,const,object,unknown,Object,数据类型,支持,类型,any
From: https://www.cnblogs.com/liujunhang/p/17035513.html

相关文章

  • 2.1JS中的数据类型
    ​  1数值型:number整数和浮点数统称为数值。例如85或3.1415926等。2字符串型:String由0个,1个或多个字符组成的序列。在JavaScript中,用双引号或单引号括起来表示,如"......
  • 2.1JS中的数据类型
    ​  1数值型:number整数和浮点数统称为数值。例如85或3.1415926等。2字符串型:String由0个,1个或多个字符组成的序列。在JavaScript中,用双引号或单引号括起来表示,如"......
  • C语言中各数据类型所占用的字节数
      sizeof(T)返回存储一个类型T的对象所需要的字节数。定义一个变量时,电脑在内存中开辟空间。1byte(字节)=8bit(比特位)1kb=1024byte(字节)1mb=1024kb1gb=1024mb我们知道......
  • 数据类型及扩展
    浮点数扩展floatf=0.1f;//输出0.1doubled=1.0/10;//输出0.1System.out.println(f==d);//输出falsefloatd1=12345678;doubled2=d1+1;System.out.pr......
  • 【Python】输入并查看数据类型
    print(type(1))----返回intprint(type('您好'))----返回str字符串print(type(0>1))------返回bool布尔类型print(type(3.145))------返回float浮点类型prin......
  • WebAssembly 语言支持
    对WebAssembly(和WASI)的支持在所有主要编程语言中都取得了很好的进展。评估一种语言对WebAssembly/WASI的支持程度很重要,因为它可以让我们了解wasmtime和Enarx的可......
  • Airtest自定义启动器支持批量运行脚本,并兼容在AirtestIDE中使用
    小站注:上期详细讲了Airtest启动器的原理,以及在最后给出了2个实现方案。本次是第2个方案的另一个实现案例,供大家学习参考。Pythonv3.7.0/Airtest:1.1.1/PocoUI:......
  • 【Java】基本数据类型 及 == 与 equals 方法的区别
     (159条消息)java判断基本数据类型_Java基础:基本数据类型及==与equals方法的区别_vivi可爱多的博客-CSDN博客 Java中的数据类型在内存的存储原理(1)基本数据......
  • 痞子衡嵌入式:MCUBootUtility v4.0发布,开始支持MCX啦
    --痞子衡维护的NXP-MCUBootUtility工具距离上一个大版本(v3.5.0)发布过去9个月了,这一次痞子衡为大家带来了版本升级v4.0.0,这个版本主要有两个重要更新需要跟大家......
  • JavaScript学习笔记—基本数据类型和引用数据类型
    基本数据类型:String、Number、Boolean、Null、Undefined引用数据类型:ObjectJS中的变量都是保存到栈内存中的  基本数据类型的值直接在栈内存中存储,值与值之间是独立......