Typescript基础数据类型
与 js 相同,ts 的原始类型包括布尔值,数值,字符串,undefined
,null
以及object
,symbol
。
布尔类型
布尔类型是最基础的数据类型,只包含true/false
的值,使用boolean
表示该类型:
typescript copyable" lang="typescript">const isDone: boolean = true;const isLoading: boolean = false;
如果为一个布尔类型的变量赋true/false
以外的值,将会报错(这里就能体现出 typescript 类型定义的好处):
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
类型的变量还可以被赋值NaN
和Infinite
。
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
代表任何不是boolean
,number
,string
,symbol
,undefined
,null
类型的值。
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 中,undefined
和null
都有各自对应的类型,分别叫做undefined
和null
。
const u: undefined = undefined;const n: null = null;
本身类型的作用并不大。但是undefined
和null
是所有类型的子类型,就这意味着它们可以赋值给其他所有类型,如number
类型的变量可以赋值为undefined
。这通常不是我们所期望的,在正式项目开发中,建议开启strictNullChecks
。
{"compilerOptions": {
"strictNullChecks": true
}
}
开启后,undefined
和null
只能赋值给any
类型的变量,或者它们自身的类型(此时,undefined
还是可以赋值给void
,这是一个例外)。
const v: void = undefined;const a1: any = undefined;
const a2: any = null;
Void
在 js 中没有空值(void
)的概念,在 ts 中可用void
表示没有返回值的函数,该类型本身没有什么用。因为它只能赋值为undefined
或null
。
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