Typescript 的原始类型

Typescript 的原始类型

如果你了解 JavaScript 的基础类型,那么这一节你会很好理解。

TypeScript的原始类型包括: boolean、number、string、void、undefined、null、symbol、bigint。

布尔类型

我们用 boolean 来表示布尔类型,注意开头是小写的,如果你在Typescript文件中写成 Boolean 那代表是 JavaScript 中的布尔对象,这是新手常犯的错误。

/* Boolean */
const isLoading: boolean = false;

这里深入一下,很多 TypeScript 的原始类型比如 boolean、number、string等等,在JavaScript中都有类似的关键字 Boolean、Number、String,后者是 JavaScript 的构造函数,比如我们用 Number 用于数字类型转化或者构造 Number 对象用的,而 TypeScript 中的 number 类型仅仅是表示类型,两者完全不同。

数字类型

JavaScript中的二进制、十进制、十六进制等数都可以用 number 类型表示。

/* Number */
const decLiteral: number = 6
const hexLiteral: number = 0xf00d
const binaryLiteral: number = 0b1010
const octalLiteral: number = 0o744
字符串类型
/* String */
const str:string = "你好,之华"
空值类型

Typescript中的空值类型不是javascript的Null;表示没有任何类型,当一个函数没有返回值时,你通常会见到其返回值类型是 void:

/* Void */
function sayVoid(): void {
    alert("我是一个不返回任何值的函数执行句柄!")
}

实际上只有undefined可以赋给void:

const isUndefined: void  = undefined;
Null 和 Undefined

TypeScript 里,undefined 和 null 两者各自有自己的类型分别叫做 undefined 和 null,和void相似,它们的本身的类型用处不是很大:

/* Null & Undefined */
let isUndef: undefined = undefined;
let isNull: null = null;

默认情况下 null 和 undefined 是所有类型的子类型,就是说你可以把 null 和 undefined 赋值给 number 类型的变量。

但是在正式项目中一般都是开启 --strictNullChecks 检测的,即 null 和 undefined 只能赋值给 any 和它们各自(一个例外是 undefined 是也可以分配给void),可以规避非常多的问题。

Symbol类型

自ECMAScript 2015起,symbol成为了一种新的原生类型,就像number和string一样。
symbol类型的值是通过Symbol构造函数创建的。

/* Symbol */
let sym1 = Symbol();
let sym2 = Symbol("key"); // 可选的字符串key

Symbols是不可改变且唯一的。

let sym3 = Symbol("key");
let sym4 = Symbol("key");

sym2 === sym3; // false, symbols是唯一的

像字符串一样,symbols也可以被用做对象属性的键(引用官网的例子)

let sym = Symbol();

let obj = {
    [sym]: "value"
};

console.log(obj[sym]); // "value"
BigInt类型

BigInt 类型在 TypeScript3.2 版本被内置,使用 BigInt 可以安全地存储和操作大整数,即使这个数已经超出了JavaScript构造函数 Number 能够表示的安全整数范围。

注意:我们在使用 BigInt 的时候,必须添加 ESNext 的编译辅助库,如下:
在这里插入图片描述
在 JavaScript 中采用双精度浮点数,这导致精度有限,比如 Number.MAX_SAFE_INTEGER 给出了可以安全递增的最大可能整数,即2**53-1,我们看一下案例:


const max = Number.MAX_SAFE_INTEGER;

const max1 = max + 1
const max2 = max + 2

max1 === max2 //true

max1与max2居然相等?在真实项目中肯定是错误的;这就是超过精读范围造成的问题,而BigInt正是解决这类问题而生的:

/* BigInt */
const maxBase = BigInt(Number.MAX_SAFE_INTEGER)
const max3 = maxBase + BigInt(1) //9007199254740992n
const max4 = maxBase + BigInt(2) //9007199254740993n
max3 === max4 //false

值得注意的是我们需要用 BigInt(number) 把 Number 转化为 BigInt,同时如果类型是 BigInt ,那么数字后面需要加 n ,就如同上面例子的 const max1 = max + 1n 中的 1n。

在TypeScript中,number 类型虽然和 BigInt 都是有表示数字的意思,但是实际上两者类型是不同的:

declare let foo: number;
declare let bar: bigint;

foo = bar; // 不能将类型“bigint”分配给类型“number”。ts(2322).
bar = foo; // 不能将类型“number”分配给类型“bigint”。ts(2322)

总结

总结一下 TypeScript 中的原始类型:

  • 布尔类型:boolean
  • 数字类型:number
  • 字符串类型:string
  • 空值:void
  • Null 和 Undefined:null 和 undefined
  • Symbol 类型:symbol
  • BigInt 大数整数类型:bigint
    以上介绍了几个原始类型,难度并不大,通过简单了解我们可以读懂一些很基础的TS代码了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值