首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么TypeScript会抛出` `void is not assignable`错误?

TypeScript会抛出void is not assignable错误是因为在TypeScript中,void类型表示没有任何返回值的函数或表达式。当我们尝试将一个具有返回值的表达式或函数赋值给void类型的变量时,TypeScript会报错。

这个错误的原因是因为void类型是一种特殊的类型,它只能接受undefinednull的赋值。它主要用于标识函数没有返回值,或者在声明变量时指定其类型为没有返回值。

例如,下面的代码会触发void is not assignable错误:

代码语言:txt
复制
let result: void;
result = 10; // 错误,不能将number类型赋值给void类型

要解决这个错误,我们需要确保将具有返回值的表达式或函数赋值给相应的类型,而不是void类型。

如果我们想要声明一个没有返回值的函数,可以使用void作为函数返回类型,例如:

代码语言:txt
复制
function greet(): void {
  console.log("Hello!");
}

在这个例子中,greet函数没有返回值,因此我们将其返回类型指定为void

总结一下,void is not assignable错误是因为将具有返回值的表达式或函数赋值给void类型的变量,而void类型只能接受undefinednull的赋值。为了解决这个错误,我们需要确保将具有返回值的表达式或函数赋值给相应的类型,而不是void类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript 官方手册翻译计划【四】:函数

因为我也是 TypeScript 的初学者,所以无法保证翻译百分之百准确,若有错误,欢迎评论区指出; 翻译内容:暂定翻译内容为 TypeScript Handbook,后续有空补充翻译文档的其它部分;...arr1: Type[], arr2: Type[]): Type[] { return arr1.concat(arr2); } 如果调用该函数的时候传入的两个数组的类型不匹配,那么正常情况下是抛出错误的...i]); } } 反过来推导,TypeScript 会使用这个内部实现,并抛出一个实际上不可能出现的错误: myForEach([1, 2, 3], (a, i) => { console.log...人们通常会写出下面的代码,并且不理解为什么抛出错误: function fn(x: string): void; function fn() { // ... } // 这里本应该可以不传入任何参数...但是,在 TypeScript 中,void 和 undefined 是不一样的东西。在本章节的最后,我们进一步讲解相关细节。

2.5K20

TypeScript 官方手册翻译计划【十二】:类

因为我也是 TypeScript 的初学者,所以无法保证翻译百分之百准确,若有错误,欢迎评论区指出; 翻译内容:暂定翻译内容为 TypeScript Handbook,后续有空补充翻译文档的其它部分;...如果类没有正确地实现这个接口,那么就会抛出一个错误: interface Pingable { ping(): void; } class Sonar implements Pingable {...Type '(name: string) => void' is not assignable to type '() => void'. */ console.log(`Hello, ${...关于 C# 为什么认为这段代码是不合法的,可以阅读这篇文章了解更多信息:为什么我无法在一个派生类中去访问一个受保护成员?...getName() { rteurn "world"; } } const d = new Derived(); d.printName(); 注意,如果我们忘记实现基类的抽象成员,那么抛出一个错误

2.5K10

TypeScript 初学者入门学习笔记(一)

TypeScript 的类型系统,在很大程度上弥补了 JavaScript 的缺点。 为什么使用 TypeScript?...1、类型系统 TypeScript 是静态类型 动态类型:是指在运行时才会进行类型检查,类型错误往往导致运行时错误。...' '); // TypeError: foo.split is not a function 运行时会报错(foo.split 不是一个函数) 静态类型:是指编译阶段就能确定每个变量的类型,类型错误往往导致语法错误...: string = u; let vo: void= u; // 编译通过 而 void 类型的变量不能赋值给其他类型的变量,只能赋值给 void 类型: let u: void; let num:...number = u; // Type 'void' is not assignable to type 'number'. let vo: void = u; // 编译通过 3、任意值

1.8K20

TS 如何进行完整性检查

例如, never 类型是那些总是抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。此外,变量也可能是 never 类型,当它们被永不为真的类型保护所约束时。...// @ts-ignore 注释忽略下一行中产生的所有错误。 建议实践中在 @ts-ignore之后添加相关提示,解释忽略了什么错误。 请注意,这个注释仅隐藏报错,并且我们建议你少使用这一注释。...1.1 好处:也适用于 if 语句 如果我们使用 if 语句,TypeScript警告我们: function toChineseNonExhaustively(x: NoYes) { if...如果我们忘记处理某个条件分支,TypeScript警告我们(因为我们隐式返回 undefined): enum NoYes { No = 'No', Yes = 'Yes', } //@...好处:实现起来简单 缺点: 运行时无保护,即不会抛出任何异常 不适用于 if 语句 四、总结 本文介绍了 TypeScript 中实现完整性检查的两种方法并通过实际的例子来介绍它们之间的差异。

2K20

typescript4.2新特性

结果和你想的可能不一样,如下图所示: 那为什么这样? 好吧,这与TypeScript如何在内部表示类型有关。...对TS熟悉的人可能这么去写: let a: [string, ...number[], boolean] = ['hello world', 10, false]; 但这在4.2以下版本,会报以下错误...而这一切在4.2中变得很和谐: 值得注意的是,如果你使用的是4.0版本,你可以这样修改你的代码,会发现报错也消失(但需要注意的是,4.1依然会报错) type Original = [string,...'number'. // Type 'undefined' is not assignable to type 'number'.(2322) // 以下场景在TypeScript 4.2...在4.2版本后,TypeScript设置了限制器以避免执行所有工作。 .d.ts扩展 不能在导入路径中使用 在TypeScript 4.2中,导入路径中包含.d.ts现在是错误的。

86410

【项目总结】TypeScript基础

message1 = 123 // Type 'message' is not assignable to type 'string' 在开发中,有时候为了方便起见我们并不会在声明每一个变量时都写上对应的数据类型...,我们更希望可以通过TypeScript本身的特性帮助我们推断出对应的变量类型: let message = "Hello World" // 在一个变量第一次赋值时,ts根据后面的赋值内容的类型,来推断出变量的类型...message = 123 // // Type 'message' is not assignable to type 'string' 图片 数据类型 TypeScript在JavaScript...类型 void通常用来指定一个没有返回值的函数; 如果一个函数我们没有写任何类型,那么它默认返回值的类型就是void,我们也可以显示的来指定返回值是void: function sum(num1: number...(num1 + num2) } never类型 never 表示永远不会发生值的类型,以一个函数为例: 如果一个函数中是一个死循环或者抛出一个异常,那么这个函数返回东西吗?

64110

TypeScript学习笔记(二)—— TypeScript基础

需要注意的是,类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能导致运行时错误: interface Cat { name: string;...上面的例子中,数字类型的变量 foo 上是没有 length 属性的,故 TypeScript 给出了相应的错误提示。 这种错误提示显然是非常有用的。...上面的例子中,我们也可以通过[扩展 window 的类型(TODO)][]解决这个错误,不过如果只是临时的增加 foo 属性,as any 更加方便。...{ name: string; } interface Cat extends Animal { run(): void; } 那么也不难理解为什么 Cat 类型的 tom 可以赋值给...若你使用了这种双重断言,那么十有八九是非常错误的,它很可能导致运行时错误。 除非迫不得已,千万别用双重断言。

5K20

一文读懂 TS 中 Object, object, {} 类型之间的区别

proto: object | null): any; // ... } 将原始类型作为原型传递给 Object.setPrototypeOf() 或 Object.create() 将导致在运行时抛出类型错误...编译器提示相应的错误: // Type '() => number' is not assignable to type // '() => string'. // Type 'number' is...当你试图访问这样一个对象的任意属性时,TypeScript 产生一个编译时错误: // Type {} const obj = {}; // Error: Property 'prop' does...// @ts-ignore 注释忽略下一行中产生的所有错误。建议实践中在 @ts-ignore之后添加相关提示,解释忽略了什么错误。 请注意,这个注释仅隐藏报错,并且我们建议你少使用这一注释。...当你试图访问这样一个对象的任意属性时,TypeScript 产生一个编译时错误

15.4K21

TypeScript 官方手册翻译计划【三】:类型收缩

因为我也是 TypeScript 的初学者,所以无法保证翻译百分之百准确,若有错误,欢迎评论区指出; 翻译内容:暂定翻译内容为 TypeScript Handbook,后续有空补充翻译文档的其它部分;...如果我们赋值给 x 一个 boolean 类型的值,那么就会抛出一个错误,因为在声明类型中并不存在 boolean 类型。 let x = Math.random() < 0.5 ?...shape: Shape) { return Math.PI * shape.radius ** 2; // 对象可能是 'undefined' } 在启用 strictNullChecks 的情况下抛出一个错误...两种解释都是合理的,但只有后者会在禁用 strictNullChecks 的情况下仍然抛出一个错误。 那么,如果这时候我们再次检查 kind 属性怎么样呢?...这样,当任意一个可能的情况没有在前面的分支得到处理的时候,在这个分支中就必然抛出错误

2K20

TypeScript 官方手册翻译计划【十一】:类型操控-模板字面量类型

因为我也是 TypeScript 的初学者,所以无法保证翻译百分之百准确,若有错误,欢迎评论区指出; 翻译内容:暂定翻译内容为 TypeScript Handbook,后续有空补充翻译文档的其它部分;...返回值类型为 void(为了方便例子的讲解) on() 的简易版函数签名可能是这样的:on(eventName: string, callBack: (newValue: any) => void)。...& PropEventSource; 这样,当传入错误的参数时,TypeScript 抛出一个错误: const person = makeWatchedObject({ firstName...(错误地使用了对象的属性名而不是事件名) person.on("firstName", () => {}); // Argument of type '"firstName"' is not assignable...当开发者通过字符串 "firstNameChanged" 调用了 on 方法的时候,TypeScript 尝试推断出 Key 的正确类型。

87780

TypeScript 4.2 Beta版本发布:带来诸多更新,营造更好的开发体验

同样,如果我们获得此文件的声明文件输出(.d.ts 输出),TypeScript 告诉你 doStuff 返回 BasicPrimitive。...现在系统能够根据你在代码中的使用方式来打印出这些类型,这意味着作为 TypeScript 用户,你可以避免显示一些烦人的巨大类型,而这往往转化为更好的.d.ts 文件输出、错误消息和快速信息及签名帮助中的编辑器内类型显示...详情查看拉取请求: https://github.com/microsoft/TypeScript/pull/36392 通过 --explainFiles 了解为什么文件已包含在程序中 对于 TypeScript...用户来说,一个常见的场景是询问“为什么 TypeScript 包含了这个文件?”。...tsc --explainFiles 使用这个选项时,TypeScript 编译器将给出一些非常冗长的输出,说明文件为何进入程序。

1.6K10

TypeScript介绍和使用

在项目推行TypeScript有什么好处 对于我们在团队中推行 TypeScript ,可能大家都有同样的疑问: 我们为什么要这么做? 或者说,我们这么做,有什么好处?...从语言类型检查的时机来看 我们所编写的代码在执行层面,按照类型检查的时机来分类,可以分为动态类型和静态类型 动态类型 动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往导致运行时错误。...静态类型 静态类型是指编译阶段就能确定每个变量的类型,这种语言的类型错误往往导致语法错误。...另一方面,也使得它的 代码质量参差不齐,维护成本高,运行时错误多。 TypeScript 的类型系统,在很大程度上弥补了 JavaScript 的缺点。...类型推论 如果没有明确的指定类型,那么 TypeScript 依照类型推论(Type Inference)的规则推断出一个类型。

83660
领券