TypeScript中type parameter使用never作为默认参数的疑问
哈哈,先为你的一语双关点个赞!这个细节抓得很准——你看到的带等号的类型参数,是TypeScript里的类型参数默认值特性,和普通函数的默认参数逻辑类似,而never在这里确实是被用作这个默认的类型参数值。
简单来说,当你定义泛型的时候,可以给类型参数设置一个默认类型,就像给函数参数设默认值一样:
// 这里T的默认类型是never function myGeneric<T = never>(input?: T) { /* ... */ }
当你调用这个泛型函数却不指定具体的类型参数时(比如myGeneric()),TypeScript就会自动把T推断为never。而因为never代表“永远不会存在的类型”,这时候你几乎没法给input传一个有效的值(毕竟没有任何值属于never类型)——这也是一些库作者会用这种写法的原因:要么你显式指定类型参数,要么这个函数在无参数调用时只能处理undefined(甚至完全没法传入有效参数,以此强制用户必须指定类型)。
这种写法在泛型工具类型或者一些需要条件性逻辑的库函数里挺常见的,比如用来实现“只有当用户指定了某个类型时,某些参数才允许传递”的约束。
内容的提问来源于stack exchange,提问作者dagda1
相关产品推荐
相关产品推荐

