前端开发工程师、技术日更博主、已过CET6 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》文章目录摘要一、引言二、void 类型2.1 定义与基本用途2.2 使用场景三、never 类型3.1 定义与基本用途3.2 使用场景四、never 和 void 的区别总结4.1 返回值含义4.2 类型兼容性4.3 使用场景差异五、结论摘要在 TypeScript 里never和void这两个类型看似相似实则有着本质的不同。本文深入剖析了never和void的定义、用途、使用场景等方面的差异通过具体代码示例帮助开发者清晰理解这两个类型以便在实际开发中准确运用提升代码的健壮性和可维护性。一、引言TypeScript 作为 JavaScript 的超集引入了丰富的类型系统为开发者提供了更强大的类型检查和代码规范能力。never和void就是其中两个特殊的类型它们在不同的场景下发挥着重要作用。然而由于它们在某些方面的表现容易让人混淆因此有必要深入探究它们之间的区别。二、void类型2.1 定义与基本用途void类型通常用于表示一个函数没有返回值。在 JavaScript 中一个函数如果没有显式地返回值默认会返回undefined。在 TypeScript 里void就对应了这种情况。functionlogMessage(message:string):void{console.log(message);// 没有显式的返回语句默认返回 undefined}constresultlogMessage(Hello, TypeScript!);// result 的类型是 void实际值是 undefined在上述代码中logMessage函数的返回类型被指定为void因为它只是打印一条消息没有返回任何值。2.2 使用场景函数无返回值当函数的主要目的是执行某些操作而不需要返回结果时使用void类型。例如一些用于修改全局状态、进行日志记录或触发事件的函数。可选参数在函数参数中void可以用于表示某个参数是可选的并且没有实际的返回值需求。functionprocessData(data:string,callback?:()void){// 处理数据if(callback){callback();}}三、never类型3.1 定义与基本用途never类型表示永远不会出现的值。一个函数返回never类型意味着这个函数永远不会正常结束可能是因为它抛出了异常或者进入了无限循环。functionthrowError(message:string):never{thrownewError(message);}functioninfiniteLoop():never{while(true){// 无限循环}}在上述代码中throwError函数抛出一个错误不会正常返回所以返回类型为neverinfiniteLoop函数进入了无限循环也不会有正常的返回同样返回never类型。3.2 使用场景异常处理当一个函数总是抛出异常时使用never类型可以明确表示该函数不会正常返回值。类型保护在类型保护的场景中never可以用于确保所有可能的类型分支都被处理。typeShape|{kind:circle;radius:number}|{kind:square;sideLength:number};functiongetArea(shape:Shape):number{switch(shape.kind){casecircle:returnMath.PI*shape.radius*shape.radius;casesquare:returnshape.sideLength*shape.sideLength;default:const_exhaustiveCheck:nevershape;return_exhaustiveCheck;}}在这个例子中default分支使用never类型的变量_exhaustiveCheck来确保Shape类型的所有可能分支都被处理。如果后续添加了新的Shape类型分支而没有在switch语句中处理TypeScript 编译器会报错。四、never和void的区别总结4.1 返回值含义void表示函数没有返回值通常返回undefined。never表示函数永远不会正常结束不会有返回值也不会返回undefined。4.2 类型兼容性void类型可以赋值给除never以外的其他类型。never类型是所有类型的子类型可以赋值给任何类型但没有类型可以赋值给never类型除了它自身。letvoidValue:voidundefined;letnum:numbervoidValue;// 可以赋值letneverValue:never;// 下面这行代码会报错没有类型可以赋值给 never 类型// let anotherNever: never num;4.3 使用场景差异void主要用于函数无返回值的情况强调函数执行操作而不产生结果。never主要用于异常处理、无限循环以及确保类型分支的完整性等场景强调函数不会正常返回。五、结论在 TypeScript 开发中准确理解和运用never和void类型至关重要。void适用于描述无返回值的函数而never则用于表示永远不会正常结束的情况。通过合理使用这两个类型开发者可以提高代码的可读性和可维护性同时借助 TypeScript 的类型检查机制提前发现潜在的错误确保代码的健壮性。