[{"data":1,"prerenderedAt":368},["ShallowReactive",2],{"post-thinking/typescript-unknown-and-never":3},{"id":4,"title":5,"body":6,"date":357,"description":358,"extension":359,"meta":360,"navigation":361,"path":362,"seo":363,"stem":364,"tags":365,"__hash__":367},"content/thinking/unknown与never.md","unknown与never的区别",{"type":7,"value":8,"toc":349},"minimark",[9,22,33,45,115,118,157,169,172,189,198,200,211,218,255,258,278,294,308,317,319,327,345],[10,11,13,14,18,19],"h1",{"id":12},"ts-中的-unknown-与-never","TS 中的 ",[15,16,17],"code",{},"unknown"," 与 ",[15,20,21],{},"never",[23,24,26,27,30,31],"h3",{"id":25},"从-isnever-认识-never","从 ",[15,28,29],{},"IsNever"," 认识 ",[15,32,21],{},[34,35,36,38,39,41,42,44],"p",{},[15,37,29],{}," 用于判断一个类型是否为 ",[15,40,21],{},"，不妨思索一下如何判断一个类型是 ",[15,43,21],{},"，下方是正确写法",[46,47,50],"spoiler",{":reveal-after-ms":48,"hint":49},"1000","悬停 1 秒以查看",[51,52,57],"pre",{"className":53,"code":54,"language":55,"meta":56,"style":56},"language-ts shiki shiki-themes github-light github-dark","type IsNever\u003CT> = [T] extends [never] ? true : false\n","ts","",[15,58,59],{"__ignoreMap":56},[60,61,64,68,72,76,79,82,85,88,90,93,96,98,101,103,106,109,112],"span",{"class":62,"line":63},"line",1,[60,65,67],{"class":66},"szBVR","type",[60,69,71],{"class":70},"sScJk"," IsNever",[60,73,75],{"class":74},"sVt8B","\u003C",[60,77,78],{"class":70},"T",[60,80,81],{"class":74},"> ",[60,83,84],{"class":66},"=",[60,86,87],{"class":74}," [",[60,89,78],{"class":70},[60,91,92],{"class":74},"] ",[60,94,95],{"class":66},"extends",[60,97,87],{"class":74},[60,99,21],{"class":100},"sj4cs",[60,102,92],{"class":74},[60,104,105],{"class":66},"?",[60,107,108],{"class":100}," true",[60,110,111],{"class":66}," :",[60,113,114],{"class":100}," false\n",[34,116,117],{},"为什么不是这个呢",[46,119,120],{":reveal-after-ms":48,"hint":49},[51,121,123],{"className":53,"code":122,"language":55,"meta":56,"style":56},"type IsNever\u003CT> = T extends never ? true : false\n",[15,124,125],{"__ignoreMap":56},[60,126,127,129,131,133,135,137,139,142,145,148,151,153,155],{"class":62,"line":63},[60,128,67],{"class":66},[60,130,71],{"class":70},[60,132,75],{"class":74},[60,134,78],{"class":70},[60,136,81],{"class":74},[60,138,84],{"class":66},[60,140,141],{"class":70}," T",[60,143,144],{"class":66}," extends",[60,146,147],{"class":100}," never",[60,149,150],{"class":66}," ?",[60,152,108],{"class":100},[60,154,111],{"class":66},[60,156,114],{"class":100},[34,158,159,160,162,163,165,166],{},"因为 ",[15,161,21],{}," 在 ",[15,164,95],{}," 时被当作空的联合类型分发，所以三元运算符一定输出 ",[15,167,168],{},"false",[34,170,171],{},"正确的写法中，包裹一层以后作为一个整体看待，不会被分发",[34,173,174,175,177,178,180,181,184,185,188],{},"所以可以将 ",[15,176,21],{}," 看作一个恒为空的联合类型（但实际上 ",[15,179,21],{}," 是类似于 ",[15,182,183],{},"number","、",[15,186,187],{},"string"," 一样的一个类型）",[34,190,191,192],{},"或者这样表述更为合理——",[193,194,21],"a",{"href":195,"rel":196},"https://github.com/microsoft/TypeScript/issues/23182#issuecomment-379094672",[197],"nofollow",[23,199,17],{"id":17},[34,201,202,204,205,207,208,210],{},[15,203,17],{}," 是晚于 ",[15,206,21],{}," 诞生的，它和 ",[15,209,21],{}," 很像，但有本质区别",[34,212,213,214,217],{},"在 ",[15,215,216],{},"TS"," 的类型系统中，除去复杂类型，有以下基础类型",[219,220,221,226,230,235,240,245,250],"ul",{},[222,223,224],"li",{},[15,225,187],{},[222,227,228],{},[15,229,183],{},[222,231,232],{},[15,233,234],{},"boolean",[222,236,237],{},[15,238,239],{},"symbol",[222,241,242],{},[15,243,244],{},"bigint",[222,246,247],{},[15,248,249],{},"null",[222,251,252],{},[15,253,254],{},"undefined",[34,256,257],{},"并有以下特殊类型",[219,259,260,264,268,273],{},[222,261,262],{},[15,263,21],{},[222,265,266],{},[15,267,17],{},[222,269,270],{},[15,271,272],{},"any",[222,274,275],{},[15,276,277],{},"void",[34,279,280,281,284,285,288,289,284,292],{},"其中，存在 ",[15,282,283],{},"never extends T"," 恒为 ",[15,286,287],{},"true","，",[15,290,291],{},"T extends unknown",[15,293,287],{},[34,295,296,297,303,304],{},"这很难让人不联想到范畴论中的",[298,299,302],"tooltip",{"text":300,"tone":301},"从它出发到任何对象都有唯一箭头","info","初始对象","与",[298,305,307],{"text":306,"tone":301},"从任何对象到它都有唯一箭头","终端对象",[34,309,310,311,313,314,316],{},"所以 ",[15,312,21],{}," 象征着底层，而 ",[15,315,17],{}," 象征着顶层",[23,318,272],{"id":272},[34,320,321,322,324,325],{},"说到了 ",[15,323,17],{},"，不得不提及 ",[15,326,272],{},[34,328,329,330,332,333,335,336,338,339,341,342,344],{},"如果把 ",[15,331,216],{}," 的类型系统看作一个范畴，",[15,334,272],{}," 既不是终端对象，也不是初始对象，更像是打破范畴的特殊单元。",[15,337,272],{}," 可以主动绕过 ",[15,340,216],{}," 的校验，让原有的类型系统变得不可预测；但为了保持灵活、降低上手难度，",[15,343,272],{}," 又不得不存在",[346,347,348],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":56,"searchDepth":350,"depth":350,"links":351},4,[352,355,356],{"id":25,"depth":353,"text":354},3,"从 IsNever 认识 never",{"id":17,"depth":353,"text":17},{"id":272,"depth":353,"text":272},"2026-04-16","既生never，何生unknown","md",{},true,"/thinking/typescript-unknown-and-never",{"title":5,"description":358},"thinking/unknown与never",[366],"TypeScript","3BB09SitXyqVUEqkQd5DgsT9tGmc7I2L6HNxscKbtWA",1776757930046]