基本数据类型
number
,string,boolean,symbol、bigint、object,null或undefined
基本类型
any 类型
any 类型可以赋值任何类型,同样 any 类型可以赋值给其他类型造成污染
unkonwn 为避免any类型污染问题,unknown类型作用与any一致,但是它只能赋值到unknown/any类型的变量上
要想使用 unknown 类型,必须缩小范围,否则无法使用
uknouwn运算有限, 只能进行比较运算(运算符
==、===、!=、!==、||、&&、?)、取反运算(运算符!)、typeof运算符和instanceof运算符这几种1
2
3
4
5let a:unknown = 1;
if (typeof a === 'number') {
let r = a + 10; // 正确
}
1
2
3
4
5let a:unknown = 1;
if (typeof a === 'number') {
let r = a + 10; // 正确
}never
为了保持与集合论的对应关系,以及类型运算的完整性,TypeScript 还引入了“空类型”的概念,即该类型为空,不包含任何值。
由于不存在任何属于“空类型”的值,所以该类型被称为
never,即不可能有这样的值。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
171、函数抛出错误,不可能有返回值
function f():never {
throw new Error('Error');
}
2、剩余的情况就属于never类型
function fn(x:string|number) {
if (typeof x === 'string') {
// ...
} else if (typeof x === 'number') {
// ...
} else {
x; // never 类型
}
}
3、变量x的类型是never,就不可能赋给它任何值,否则都会报错。
let x:never;object 类型
大写的
Object类型代表 JavaScript 语言里面的广义对象。所有可以转成对象的值,都是Object类型,这囊括了几乎所有的值。除了 Null / undefined1
2
3
4
5
6
7
8let obj:Object;
obj = true;
obj = 'hi';
obj = 1;
obj = { foo: 123 };
obj = [1, 2];
obj = (a:number) => a + 1;undefined/null
既是值,又是类型。
作为值,它们有一个特殊的地方:任何其他类型的变量都可以赋值为
undefined或null。
1 | const str: string = 'hello there' |



LiYongci
衔蝉
哈希米