[{"data":1,"prerenderedAt":181},["ShallowReactive",2],{"content:\u002F2023\u002Ftypescript\u002Fts-5":3,"surround:\u002F2023\u002Ftypescript\u002Fts-5":170},{"id":4,"title":5,"body":6,"categories":146,"date":149,"description":25,"draft":150,"extension":151,"image":152,"meta":153,"navigation":155,"path":156,"permalink":152,"published":152,"readingTime":157,"recommend":152,"references":152,"seo":162,"sitemap":163,"stem":166,"tags":167,"type":168,"updated":152,"__hash__":169},"content\u002Fposts\u002F2023\u002Ftypescript\u002Fts-5.md","TS 中的类型运算：交叉类型",{"type":7,"value":8,"toc":140},"minimark",[9,14,18,29,32,38,44,47,53,56,62,65,71,90,96,110,116,119,125],[10,11,13],"h2",{"id":12},"交叉类型交集","交叉类型（交集）",[15,16,17],"p",{},"英文全称：intersection types",[19,20,26],"pre",{"className":21,"code":23,"language":24,"meta":25},[22],"language-ts","type A = string & number;\n\u002F\u002F   ^-- never\n","ts","",[27,28,23],"code",{"__ignoreMap":25},[15,30,31],{},"交叉类型一般多用于对象，而不用于简单类型",[15,33,34],{},[35,36],"img",{"alt":25,"src":37},"\u002Fimages\u002Ftypescript\u002Fts-5\u002Fts_5_01.png",[19,39,42],{"className":40,"code":41,"language":24,"meta":25},[22],"type 有左手的人 = { left: string }\n\nconst b = { left: 'yse', right: 'yes' }\nconst a1: 有左手的人 = b \u002F\u002F 不报错\n\nconst a2: 有左手的人 = { left: 'yse', right: 'yes' } \u002F\u002F 报错\n",[27,43,41],{"__ignoreMap":25},[15,45,46],{},"可用于接口求交集",[19,48,51],{"className":49,"code":50,"language":24,"meta":25},[22],"interface Colorful {\n  color: string;\n}\ninterface Circle {\n  radius: number;\n}\ntype ColorfulCircle = Colorful & Circle;\n",[27,52,50],{"__ignoreMap":25},[15,54,55],{},"可用于模拟继承",[19,57,60],{"className":58,"code":59,"language":24,"meta":25},[22],"type Person = {\n  name: string;\n  age: number;\n};\ntype User = Person & {\n  id: number;\n  email: string;\n};\nconst u: User = {\n  id: 1,\n  name: 'ClariS',\n  age: 18,\n  email: 'xxx@yyy.com'\n};\n",[27,61,59],{"__ignoreMap":25},[10,63,64],{"id":64},"交叉类型的特殊情况",[19,66,69],{"className":67,"code":68,"language":24,"meta":25},[22],"type Person = {\n  name: string;\n  age: number;\n  id: string;\n};\ntype User = Person & {\n  id: number;\n  email: string;\n};\nconst u: User = {\n  id: 1 as never, \u002F\u002F 此处 id 的类型为 never\n  name: 'ClariS',\n  age: 18,\n  email: 'xxx@yyy.com',\n};\n",[27,70,68],{"__ignoreMap":25},[15,72,73,74,77,78,82,83,86,87],{},"当把上面 ",[27,75,76],{"code":76},"id"," 的类型",[79,80,81],"strong",{},"从一个比较大的类型，变为比较小的类型","时，整个 ",[27,84,85],{"code":85},"User"," 的类型都为 ",[27,88,89],{"code":89},"never",[19,91,94],{"className":92,"code":93,"language":24,"meta":25},[22],"type Person = {\n  name: string;\n  age: number;\n  id: 'A';\n};\ntype User = Person & {\n  id: 'B';\n  email: string;\n};\nconst u: User = { \u002F\u002F User = never\n  id: 1,\n  name: 'ClariS',\n  age: 18,\n  email: 'xxx@yyy.com',\n};\n\ntype A = { kind: 'A'; name: string };\ntype B = { kind: 'B'; age: number } & A;\n\u002F\u002F   ^-- never\n",[27,95,93],{"__ignoreMap":25},[15,97,98,99,102,103,105,106,109],{},"上面的例子中，当对象属性发生冲突时，",[27,100,101],{"code":101},"type"," 只会把类型变为 ",[27,104,89],{"code":89},"，但类型并不报错，只在使用时报错；而 ",[27,107,108],{"code":108},"interface"," 会直接报错",[19,111,114],{"className":112,"code":113,"language":24,"meta":25},[22],"interface Person {\n  name: string;\n  age: number;\n  id: string;\n}\ninterface User extends Person {\n  \u002F\u002F        ^-- Type 'number' is not assignable to type 'string'\n  id: number;\n  email: string;\n}\n",[27,115,113],{"__ignoreMap":25},[15,117,118],{},"函数的交集会得到一个参数的并集",[19,120,123],{"className":121,"code":122,"language":24,"meta":25},[22],"type A = {\n  method: (a: number) => void;\n};\ntype B = {\n  method: (a: string) => void;\n} & A;\n\nconst b: B = {\n  method(a) {\n    a; \u002F\u002F number | string\n  }\n};\n",[27,124,122],{"__ignoreMap":25},[126,127,128],"blockquote",{},[15,129,130,131,134,135,137,138],{},"总结：交叉类型常用于",[79,132,133],{},"有交集","的类型 A、B，如果 A、B 无交集，可能得到 ",[27,136,89],{"code":89},"，也可能只是属性为 ",[27,139,89],{"code":89},{"title":25,"searchDepth":141,"depth":141,"links":142},4,[143,145],{"id":12,"depth":144,"text":13},2,{"id":64,"depth":144,"text":64},[147,148],"学习笔记","TypeScript","2023-01-17",false,"md",null,{"comments":150,"slots":154},{},true,"\u002F2023\u002Ftypescript\u002Fts-5",{"text":158,"minutes":159,"time":160,"words":161},"3 min read",2.3,138000,460,{"title":5,"description":25},{"loc":156,"images":164},[165],{"loc":37},"posts\u002F2023\u002Ftypescript\u002Fts-5",[148],"tech","k2UXyPzuHEjF5HFZhDEIVM5QXij1K3PijQXn8N-Nxjc",[171,176],{"title":172,"path":173,"stem":174,"date":175,"type":168,"children":-1},"TS 中的类型运算：联合类型","\u002F2023\u002Ftypescript\u002Fts-4","posts\u002F2023\u002Ftypescript\u002Fts-4","2023-01-12",{"title":177,"path":178,"stem":179,"date":180,"type":168,"children":-1},"类型兼容与赋值","\u002F2023\u002Ftypescript\u002Fts-6","posts\u002F2023\u002Ftypescript\u002Fts-6","2023-01-30",1793699839434]