Typescript基础数据类型

与 js 相同,ts 的原始类型包括布尔值,数值,字符串,undefinednull以及objectsymbol

布尔类型

布尔类型是最基础的数据类型,只包含true/false的值,使用boolean表示该类型:

typescript copyable" lang="typescript">const isDone: boolean = true;

const isLoading: boolean = false;

如果为一个布尔类型的变量赋true/false以外的值,将会报错(这里就能体现出 typescript 类型定义的好处):

boolean-type-error

ts 中有很多针对于原始类型的构造方法,如:对 boolean 类型来说是 Boolean, 如果使用 Boolean 构造函数生成的变量,其类型并不是 boolean。请注意类型的大小写

// 这是错误的用法,此时的val是Boolean类型

const val: boolean = newBoolean(true);

数值类型

ts 中的所有数字都是浮点数,其类型为number,并且支持十进制,二进制,八进制,十六进制。

const decimalNumber: number = 6; //十进制

const binaryNumber: number = 0b11; //二进制

const octalNumber: number = 0o11; //八进制

const hexNumber: number = 0xfff; //十六进制

将会被编译成:

var decimalNumber = 6; //十进制

var binaryNumber = 3; //二进制

var octalNumber = 9; //八进制

var hexNumber = 0xfff; //十六进制

除此之外,number类型的变量还可以被赋值NaNInfinite

const nanNumber: number = NaN;

const positiveInfiniteNumber: number = Infinity;

const negativeInfiniteNumber: number = -Infinity;

针对大数字,可以使用_连接数字增强可读性:

const value: number = 1_1234_0000;

该数字会被编译成:

var value = 112340000;

字符串类型

ts 使用string表示字符串,并且支持模板字符串格式。

const str1: string = "blue";

const str2: string = `${str1}, yellow, red`;

Object

object代表任何不是booleannumberstringsymbolundefinednull类型的值。

const obj: object = {};

const array: object = [];

Symbol

symbol是 es6 新增的基础类型,关于symbol语法使用可以查看阮一峰大佬的 Symbol 文章,注意:使用symbol时,需要在tsconfig.json文件中添加ES2015编译辅助库。

{

"compilerOptions": {

"lib": [

"ES2015"

]

}

}

const s: symbol = Symbol();

Undefined and Null

在 ts 中,undefinednull都有各自对应的类型,分别叫做undefinednull

const u: undefined = undefined;

const n: null = null;

本身类型的作用并不大。但是undefinednull是所有类型的子类型,就这意味着它们可以赋值给其他所有类型,如number类型的变量可以赋值为undefined。这通常不是我们所期望的,在正式项目开发中,建议开启strictNullChecks

{

"compilerOptions": {

"strictNullChecks": true

}

}

开启后,undefinednull只能赋值给any类型的变量,或者它们自身的类型(此时,undefined还是可以赋值给void,这是一个例外)。

const v: void = undefined;

const a1: any = undefined;

const a2: any = null;

Void

在 js 中没有空值(void)的概念,在 ts 中可用void表示没有返回值的函数,该类型本身没有什么用。因为它只能赋值为undefinednull

const v1: void = null;

const v2: void = undefined;

functionfoo(): void{

console.log("foo");

}

如果开启strictNullChecks, void类型变量只能被赋值为undefined

Any

ts 中用any表示任意类型,即any类型的变量的使用方法和 js 中的变量一模一样。在引用一些 js 所写的第三方库时,或者开发时还不情况当前变量的具体类型时,都可以用any类型的变量。

let val: any = true;

val = "string";

val = 1;

过度使用any类型会把 typescript 变成 anyscript,这样会失去类型保护的意义。通常情况下,不应该使用any。

Unknown

在3.0 新引入了 unknown,它相当于是any对应的安全类型。与any的主要区别:

  • any类型的变量可以赋值给其他类型的变量,unknown只能赋值给unknown或者any在未做类型断言前
  • 在对unknown变量进行操作前,必须进行类型断言,而any不需要

let unknown1: unknown;

const unknown2: unknown = unknown1;

const any1: any = unknown1;

// Error

// Type 'unknown' is not assignable to type 'number'.ts(2322)

// const num: number = unknown1;

if (typeof unknownVal === "string") {

unknownVal.toUpperCase();

}

// Error

// Object is of type 'unknown'.ts(2571)

// unknownVal.toUpperCase();

Never

never表示永不存在的值,它是任何类型的子类型,即可以赋值给任意类型。然而,没有任何类型是它的子类型,这意味着没有任何类型的值可以赋值给never(它自身除外)。该类型本身没什么作用,实际开发业务也很少用到,多用于类型编程中。

比较常见的场景:

// 函数抛出错误,没有任何返回值

functionerror(message: string): never{

thrownewError(message);

}

// 永远不会终止的函数

functioninfiniteLoop(): never{

while (true) {}

}

// 永远为空的数组

const empty: never[] = [];

以上是 Typescript基础数据类型 的全部内容, 来源链接: utcz.com/a/18471.html

回到顶部