We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我一直对 TypeScript 中 never 类型比较迷惑,就是看字面好像明白是什么意思,但实际用的时候,如果抛出了相关的类型错误,又好像不知道怎么解决。
所以,这段时间查了一下相关资料。最后,看到 TypeScript 的官方 github issue 上有一篇引入这个特性时官方发布的说明,讲的应该是最权威、准确的。经个人理解,特此翻译一下,以方便其他同学。
never是指一个函数没有任何返回时的类型,它是一种从来不会为真的,在类型守护下的变量类型。还是没明白什么意思是吧?😳接着看下面的详细说明:
never
const foo: never = 1 // Type '1' is not assignable to type 'never'.
return
由于never属于其它所有类型的子类型。因此,如果一个回调函数必须返回一个以上的特定类型时,我们可以认为它返回的其实就是never类型:
function test(cb: () => string) { let s = cb(); return s; } test(() => "hello"); test(() => fail()); test(() => { throw new Error(); })
下面是一些会返回never类型的函数示例:
// 抛出异常,会导致下面的代码永远不会被执行,因此返回类型为 never function error(message: string): never { throw new Error(message); } // 类型自动推断返回类型为 never function fail() { return error("Something failed"); } // 存在死循环,导致函数永远不会执行完毕,因此返回类型为 never function infiniteLoop(): never { while (true) { } }
帖子下面有人回复说never这个名称容易引起歧义,建议改成nothing。作者说他当初在起名时也考虑了很久,就是没有想到这个简洁明了的词语😀。
nothing
因此,never和void的区别就是,返回void类型的函数其实返回了一个包含void值。而返回never类型的函数就是什么都没有,就是nothing。
void
The text was updated successfully, but these errors were encountered:
https://egghead.io/lessons/typescript-use-the-never-type-to-avoid-code-with-dead-ends-using-typescript
这个视频很直观
Sorry, something went wrong.
@loveky ,我发现只有你分享的这一节课能看,想看其它章节都得再付费。这是为什么呢?难道是这一章节你已经付过费了?
没付费,应该本来这一节就是可以无条件观看的
No branches or pull requests
我一直对 TypeScript 中 never 类型比较迷惑,就是看字面好像明白是什么意思,但实际用的时候,如果抛出了相关的类型错误,又好像不知道怎么解决。
所以,这段时间查了一下相关资料。最后,看到 TypeScript 的官方 github issue 上有一篇引入这个特性时官方发布的说明,讲的应该是最权威、准确的。经个人理解,特此翻译一下,以方便其他同学。
never
是指一个函数没有任何返回时的类型,它是一种从来不会为真的,在类型守护下的变量类型。还是没明白什么意思是吧?😳接着看下面的详细说明:never
是所有其它类型的子类型,它可以赋值给其它任何类型never
类型,除了它本身以外return
语句或者return
的就是一个never
类型的表达式,并且函数由于具体的代码逻辑控制无法执行到终点,那么此函数的返回值就会被自动推断为never
类型由于
never
属于其它所有类型的子类型。因此,如果一个回调函数必须返回一个以上的特定类型时,我们可以认为它返回的其实就是never
类型:下面是一些会返回
never
类型的函数示例:帖子下面有人回复说
never
这个名称容易引起歧义,建议改成nothing
。作者说他当初在起名时也考虑了很久,就是没有想到这个简洁明了的词语😀。因此,
never
和void
的区别就是,返回void
类型的函数其实返回了一个包含void
值。而返回never
类型的函数就是什么都没有,就是nothing
。参考资料
The text was updated successfully, but these errors were encountered: