TypeScript 数据类型
TypeScript 数据类型
特殊类型
TypeScript 有三种特殊类型:
- 任意类型(
any
) - 空类型(
void
) - 未知类型(
unknown
)
any
any
类型表示没有任何限制,这个类型的变量可以赋予任意类型的值。
基本含义
let x: any;
x = 0;
x = false;
x = "string";
x = [];
x = {};
上面的代码,声明变量 x
类型为 any
,
x
赋值 number
、boolean
、string
、array
、object
类型的数据,都不会报错。
其实变量类型一旦设为 any
,TypeScript 实际上会关闭这个变量的类型检查。
注意
注意:开发时应该尽量避免使用 any
类型,否则就失去了使用 TypeScript 的意义。
类型推断
let x;
开发中没有指定变量类型,TypeScript 就会认为这个变量的类型为 any
。
类型污染
let x: any = "hello";
let num: number = 0;
num = x; // ts 不会报错
any
类型关闭了类型检查,就会导致它“污染”其他变量。
unknown
为了解决
any
类型“污染”其他变量的问题,TypeScript 引入unknown
类型。
它与any
含义相同,表示类型不确定,但它的使用有些限制,相当于严格版的any
。
基本含义
let x: unknown;
x = 0;
x = "hello";
x = false;
unknown
类型的变量 x
同样可以像 any
类型变量一样进行赋值。
let x: unknown = 1;
let x: string = x; // ts 会报错
let x: number = x; // ts 会报错
unknown
类型跟 any
类型不同的地方在于,它不能直接赋值给其他的类型的变量。
let obj: unknown = { name: "ts" };
obj.name; // ts 会报错
let str: unknown = "ts";
str.split(""); // ts 会报错
let func: unknown = () => console.log("ts");
func(); // ts 会报错
unknown
类型变量不能直接调用方法和属性,也不能作为函数进行执行。
运算符
let num: unknown = 1;
num + 1; // ts 会报错
num === 1; // ts 不会报错
unknown
类型变量能够进行的运算是有限的。
可以使用的运算符:
==
===
!=
!==
||
&&
!
typeof
instanceof
类型缩小
let num: unknown = 10;
if (typeof num === "number") {
num += 10;
}
可以进行“类型缩小”,对数据进行其他操作。
never
never
类型表示空类型,它表示一个永不存在的值的类型。
let x: never;
x = 0; // ts 会报错
never
类型变量不能赋值任何值。
基本类型
TypeScript 有五种基本类型:
- number
- boolean
- string
- bigint
- symbol
number
number
类型包含全部浮点数。
TypeScript 里的所有数字都是浮点数。
支持二进制、八进制、十进制、十六进制字面量
let num: number = 0;
num = 1.1;
num = 0b10;
num = 0o77;
num = 1;
num = 0xfff;
boolean
boolean
类型只包含true
和false
两个值。
let x: boolean = true;
x = false;
string
string
类型包含全部字符串。
可以使用双引号("
)或单引号('
)表示字符串。
let str: string = "TypeScript";
let s: string = "TypeScript";
也可以使用模板字符串(${}
)表示字符串。
let expr: string = `${str}!!!`;
bigint
bigint
类型包含全部大整数(为了解决number
类型整数溢出问题)。
大整数
JavaScript 中可以用 number
表示的最大整数是 (253 - 1),也可以使用 Number.MAX_SAFE_INTEGER
表示。
如果超过这个界限,就可以用 bigint
类型表示。
基本含义
let num: bigint = 100n;
let n: bigint = 0xfffn;
在一个整数后面加上 n 表示 bigint
类型。
let num: bigint = 100; // ts 会报错
bigint
类型与 number
类型不兼容。
symbol
symbol
类型包含全部Symbol
值。
let x: symbol = Symbol();
object
object
类型包含所有非原始类型的值(number
、string
、boolean
、symbol
、bigint
)。
let obj: object = { name: "ts" };
let arr: object = [1, 2, 3];
let func: object = () => {
console.log("ts");
};
独立类型
null
null
类型只有一个值null
,表示空。
let x: null = null;
undefined
undefined
类型只有一个值undefined
,表示未定义。
let x: undefined = undefined;