null类型
- 特点:表示空值,是JavaScript的一个基本类型,在TypeScript中也有对应类型。它是
object
类型的子类型,这是历史遗留问题(在JavaScript中typeof null === 'object'
)。
- 区别:与
undefined
不同,null
是人为主动赋值表示“空”的意图,而undefined
通常表示变量未初始化或函数无返回值。
- 使用示例:
let myNull: null = null;
function returnNull(): null {
return null;
}
undefined类型
- 特点:表示未定义,也是JavaScript的基本类型。在TypeScript里,变量声明但未初始化时,其类型就是
undefined
。
- 区别:和
null
类似,但undefined
更多是被动产生的,比如变量未赋值、对象属性不存在、函数无显式返回值等情况。
- 使用示例:
let myUndefined: undefined;
function noReturnValue(): undefined {
// 没有return语句,默认返回undefined
}
void类型
- 特点:通常用于表示函数没有返回值。它可以赋值为
null
和undefined
(在严格模式下,--strictNullChecks
开启时,只能赋值undefined
)。
- 区别:与
null
、undefined
不同,它不是代表某个具体的值,而是一种抽象的类型概念,主要用于函数返回值类型的标识。
- 使用示例:
let myVoid: void;
myVoid = undefined; // 在严格模式下,如果不允许null,只能赋值undefined
function printMessage(): void {
console.log('Hello');
// 没有return语句,默认返回值类型为void
}
never类型
- 特点:表示永远不存在的值的类型。通常用于函数抛出异常或函数永远不会有返回值(比如无限循环的函数)。它是所有类型的子类型,但是没有类型是
never
的子类型(除了never
本身)。
- 区别:与其他类型不同,
never
强调的是一种“不可能”的状态,而null
、undefined
和void
都表示某种可能存在的“空”或“无返回”的状态。
- 使用示例:
function throwError(message: string): never {
throw new Error(message);
}
function infiniteLoop(): never {
while (true) {}
}