[{"data":1,"prerenderedAt":1146},["ShallowReactive",2],{"post-engineering/vue-typescript-pass-through-types":3},{"id":4,"title":5,"body":6,"date":1136,"description":15,"extension":1137,"meta":1138,"navigation":121,"path":1139,"seo":1140,"stem":1141,"tags":1142,"__hash__":1145},"content/engineering/透传时的类型声明.md","透传时的类型声明",{"type":7,"value":8,"toc":1133},"minimark",[9,12,16,25,33,44,62,376,412,496,506,510,520,526,821,824,1129],[10,11,5],"h1",{"id":5},[13,14,15],"p",{},"完整导入一个组件的所有属性可借由透传实现",[13,17,18],{},[19,20,24],"a",{"href":21,"rel":22},"https://cn.vuejs.org/guide/components/attrs",[23],"nofollow","透传 Attributes | Vue.js",[13,26,27,28,32],{},"也可以控制非",[29,30,31],"code",{},"props","属性不透传",[13,34,35,36,39,40,43],{},"对于一个完善的组件（比如",[29,37,38],{},"element-plus","、",[29,41,42],{},"prime-vue","）往往具有完备的类型声明，在透传时同样希望完整映射原组件的类型",[13,45,46,47,50,51,54,55,39,58,61],{},"在",[29,48,49],{},"vue.js","中，",[29,52,53],{},"defineProps","不支持复杂类型（比如动态类型推导",[29,56,57],{},"Record",[29,59,60],{},"[K in keyof T]","），如下：",[63,64,69],"pre",{"className":65,"code":66,"language":67,"meta":68,"style":68},"language-ts shiki shiki-themes github-light github-dark","// popover-items.ts\nimport type { ElPopover } from 'element-plus'\nimport type { RawProps } from './popover-items-type'\n\nexport const popoverItemsProps = {\n// 新增 props\n// foo: {\n// type: String,\n// default: 'foo',\n// },\n} as const\n\n// 自动继承 ElPopover 所有 props + 合并新增 props\nexport type PopoverItemsProps = RawProps\n\n// 自动继承 ElPopover emits + 合并新增 emits\nexport type PopoverItemsEmits\n  = InstanceType\u003Ctypeof ElPopover>['$emit']\n    & ((event: 'select', idx: number, vnode: any) => void)\n\nexport const popoverItemsEmits = {\n  select: (idx: number, _vNode: any) => !Number.isNaN(idx),\n} as const\n","ts","",[29,70,71,80,101,116,123,142,148,154,160,166,172,184,189,195,211,216,222,232,256,308,313,327,367],{"__ignoreMap":68},[72,73,76],"span",{"class":74,"line":75},"line",1,[72,77,79],{"class":78},"sJ8bj","// popover-items.ts\n",[72,81,83,87,90,94,97],{"class":74,"line":82},2,[72,84,86],{"class":85},"szBVR","import",[72,88,89],{"class":85}," type",[72,91,93],{"class":92},"sVt8B"," { ElPopover } ",[72,95,96],{"class":85},"from",[72,98,100],{"class":99},"sZZnC"," 'element-plus'\n",[72,102,104,106,108,111,113],{"class":74,"line":103},3,[72,105,86],{"class":85},[72,107,89],{"class":85},[72,109,110],{"class":92}," { RawProps } ",[72,112,96],{"class":85},[72,114,115],{"class":99}," './popover-items-type'\n",[72,117,119],{"class":74,"line":118},4,[72,120,122],{"emptyLinePlaceholder":121},true,"\n",[72,124,126,129,132,136,139],{"class":74,"line":125},5,[72,127,128],{"class":85},"export",[72,130,131],{"class":85}," const",[72,133,135],{"class":134},"sj4cs"," popoverItemsProps",[72,137,138],{"class":85}," =",[72,140,141],{"class":92}," {\n",[72,143,145],{"class":74,"line":144},6,[72,146,147],{"class":78},"// 新增 props\n",[72,149,151],{"class":74,"line":150},7,[72,152,153],{"class":78},"// foo: {\n",[72,155,157],{"class":74,"line":156},8,[72,158,159],{"class":78},"// type: String,\n",[72,161,163],{"class":74,"line":162},9,[72,164,165],{"class":78},"// default: 'foo',\n",[72,167,169],{"class":74,"line":168},10,[72,170,171],{"class":78},"// },\n",[72,173,175,178,181],{"class":74,"line":174},11,[72,176,177],{"class":92},"} ",[72,179,180],{"class":85},"as",[72,182,183],{"class":85}," const\n",[72,185,187],{"class":74,"line":186},12,[72,188,122],{"emptyLinePlaceholder":121},[72,190,192],{"class":74,"line":191},13,[72,193,194],{"class":78},"// 自动继承 ElPopover 所有 props + 合并新增 props\n",[72,196,198,200,202,206,208],{"class":74,"line":197},14,[72,199,128],{"class":85},[72,201,89],{"class":85},[72,203,205],{"class":204},"sScJk"," PopoverItemsProps",[72,207,138],{"class":85},[72,209,210],{"class":204}," RawProps\n",[72,212,214],{"class":74,"line":213},15,[72,215,122],{"emptyLinePlaceholder":121},[72,217,219],{"class":74,"line":218},16,[72,220,221],{"class":78},"// 自动继承 ElPopover emits + 合并新增 emits\n",[72,223,225,227,229],{"class":74,"line":224},17,[72,226,128],{"class":85},[72,228,89],{"class":85},[72,230,231],{"class":204}," PopoverItemsEmits\n",[72,233,235,238,241,244,247,250,253],{"class":74,"line":234},18,[72,236,237],{"class":85},"  =",[72,239,240],{"class":204}," InstanceType",[72,242,243],{"class":92},"\u003C",[72,245,246],{"class":85},"typeof",[72,248,249],{"class":92}," ElPopover>[",[72,251,252],{"class":99},"'$emit'",[72,254,255],{"class":92},"]\n",[72,257,259,262,265,269,272,275,278,281,283,286,288,291,293,296,299,302,305],{"class":74,"line":258},19,[72,260,261],{"class":85},"    &",[72,263,264],{"class":92}," ((",[72,266,268],{"class":267},"s4XuR","event",[72,270,271],{"class":85},":",[72,273,274],{"class":99}," 'select'",[72,276,277],{"class":92},", ",[72,279,280],{"class":267},"idx",[72,282,271],{"class":85},[72,284,285],{"class":134}," number",[72,287,277],{"class":92},[72,289,290],{"class":267},"vnode",[72,292,271],{"class":85},[72,294,295],{"class":134}," any",[72,297,298],{"class":92},") ",[72,300,301],{"class":85},"=>",[72,303,304],{"class":134}," void",[72,306,307],{"class":92},")\n",[72,309,311],{"class":74,"line":310},20,[72,312,122],{"emptyLinePlaceholder":121},[72,314,316,318,320,323,325],{"class":74,"line":315},21,[72,317,128],{"class":85},[72,319,131],{"class":85},[72,321,322],{"class":134}," popoverItemsEmits",[72,324,138],{"class":85},[72,326,141],{"class":92},[72,328,330,333,336,338,340,342,344,347,349,351,353,355,358,361,364],{"class":74,"line":329},22,[72,331,332],{"class":204},"  select",[72,334,335],{"class":92},": (",[72,337,280],{"class":267},[72,339,271],{"class":85},[72,341,285],{"class":134},[72,343,277],{"class":92},[72,345,346],{"class":267},"_vNode",[72,348,271],{"class":85},[72,350,295],{"class":134},[72,352,298],{"class":92},[72,354,301],{"class":85},[72,356,357],{"class":85}," !",[72,359,360],{"class":92},"Number.",[72,362,363],{"class":204},"isNaN",[72,365,366],{"class":92},"(idx),\n",[72,368,370,372,374],{"class":74,"line":369},23,[72,371,177],{"class":92},[72,373,180],{"class":85},[72,375,183],{"class":85},[63,377,379],{"className":65,"code":378,"language":67,"meta":68,"style":68},"// popover-items.vue\nconst props = defineProps\u003CPartial\u003CPopoverItemsProps>>()\n",[29,380,381,386],{"__ignoreMap":68},[72,382,383],{"class":74,"line":75},[72,384,385],{"class":78},"// popover-items.vue\n",[72,387,388,391,394,396,399,401,404,406,409],{"class":74,"line":82},[72,389,390],{"class":85},"const",[72,392,393],{"class":134}," props",[72,395,138],{"class":85},[72,397,398],{"class":204}," defineProps",[72,400,243],{"class":92},[72,402,403],{"class":204},"Partial",[72,405,243],{"class":92},[72,407,408],{"class":204},"PopoverItemsProps",[72,410,411],{"class":92},">>()\n",[63,413,415],{"className":65,"code":414,"language":67,"meta":68,"style":68},"// popover-items-type.d.ts\nimport type { PopoverProps } from 'element-plus'\nimport type { ExtractPropTypes } from 'vue'\nimport type { popoverItemsProps } from './popover-items'\n\nexport type RawProps\n  = PopoverProps\n    & ExtractPropTypes\u003Ctypeof popoverItemsProps>\n",[29,416,417,422,435,449,463,467,475,482],{"__ignoreMap":68},[72,418,419],{"class":74,"line":75},[72,420,421],{"class":78},"// popover-items-type.d.ts\n",[72,423,424,426,428,431,433],{"class":74,"line":82},[72,425,86],{"class":85},[72,427,89],{"class":85},[72,429,430],{"class":92}," { PopoverProps } ",[72,432,96],{"class":85},[72,434,100],{"class":99},[72,436,437,439,441,444,446],{"class":74,"line":103},[72,438,86],{"class":85},[72,440,89],{"class":85},[72,442,443],{"class":92}," { ExtractPropTypes } ",[72,445,96],{"class":85},[72,447,448],{"class":99}," 'vue'\n",[72,450,451,453,455,458,460],{"class":74,"line":118},[72,452,86],{"class":85},[72,454,89],{"class":85},[72,456,457],{"class":92}," { popoverItemsProps } ",[72,459,96],{"class":85},[72,461,462],{"class":99}," './popover-items'\n",[72,464,465],{"class":74,"line":125},[72,466,122],{"emptyLinePlaceholder":121},[72,468,469,471,473],{"class":74,"line":144},[72,470,128],{"class":85},[72,472,89],{"class":85},[72,474,210],{"class":204},[72,476,477,479],{"class":74,"line":150},[72,478,237],{"class":85},[72,480,481],{"class":204}," PopoverProps\n",[72,483,484,486,489,491,493],{"class":74,"line":156},[72,485,261],{"class":85},[72,487,488],{"class":204}," ExtractPropTypes",[72,490,243],{"class":92},[72,492,246],{"class":85},[72,494,495],{"class":92}," popoverItemsProps>\n",[13,497,498,499,502,503,505],{},"打包时将会提示",[29,500,501],{},"[vite:vue] [@vue/compiler-sfc] Unresolvable type: TSTypeQuery","\n尽管此时类型已经完全交由",[29,504,67],{},"生成",[507,508,509],"h4",{"id":509},"解决方式",[511,512,513,517],"ol",{},[514,515,516],"li",{},"显示定义: 对于一个属性较少、类型较简单的组件完全足够",[514,518,519],{},"完整映射：",[13,521,522,523,525],{},"使用",[29,524,38],{},"定义的元组，进行组合",[63,527,529],{"className":65,"code":528,"language":67,"meta":68,"style":68},"import type { PopoverEmits, PopoverProps } from 'element-plus'\n// import type { PropType } from 'vue'\nimport { popoverEmits, popoverProps } from 'element-plus'\n\n// 直接继承 Element Plus 的运行时 props 定义\nexport const popoverItemsProps = {\n  ...popoverProps,\n  // 新增 props\n  // items: {\n  //   type: Array as PropType\u003CArray\u003C{ label: string, value: any }>>,\n  //   default: () => [],\n  // },\n} as const\n\n// 直接继承 Element Plus 的运行时 emits 定义\nexport const popoverItemsEmits = {\n  ...popoverEmits,\n  // 新增 emits\n  select: (idx: number, _vNode: any) => !Number.isNaN(idx),\n} as const\n\n// 类型定义\nexport type PopoverItemsProps = PopoverProps & {\n  items?: Array\u003C{ label: string, value: any }>\n}\n\nexport type PopoverItemsEmits = PopoverEmits & {\n  select: [idx: number, vnode: any]\n}\n",[29,530,531,544,549,560,564,569,581,589,594,599,604,609,614,622,626,631,643,650,655,687,695,699,704,722,757,763,768,787,816],{"__ignoreMap":68},[72,532,533,535,537,540,542],{"class":74,"line":75},[72,534,86],{"class":85},[72,536,89],{"class":85},[72,538,539],{"class":92}," { PopoverEmits, PopoverProps } ",[72,541,96],{"class":85},[72,543,100],{"class":99},[72,545,546],{"class":74,"line":82},[72,547,548],{"class":78},"// import type { PropType } from 'vue'\n",[72,550,551,553,556,558],{"class":74,"line":103},[72,552,86],{"class":85},[72,554,555],{"class":92}," { popoverEmits, popoverProps } ",[72,557,96],{"class":85},[72,559,100],{"class":99},[72,561,562],{"class":74,"line":118},[72,563,122],{"emptyLinePlaceholder":121},[72,565,566],{"class":74,"line":125},[72,567,568],{"class":78},"// 直接继承 Element Plus 的运行时 props 定义\n",[72,570,571,573,575,577,579],{"class":74,"line":144},[72,572,128],{"class":85},[72,574,131],{"class":85},[72,576,135],{"class":134},[72,578,138],{"class":85},[72,580,141],{"class":92},[72,582,583,586],{"class":74,"line":150},[72,584,585],{"class":85},"  ...",[72,587,588],{"class":92},"popoverProps,\n",[72,590,591],{"class":74,"line":156},[72,592,593],{"class":78},"  // 新增 props\n",[72,595,596],{"class":74,"line":162},[72,597,598],{"class":78},"  // items: {\n",[72,600,601],{"class":74,"line":168},[72,602,603],{"class":78},"  //   type: Array as PropType\u003CArray\u003C{ label: string, value: any }>>,\n",[72,605,606],{"class":74,"line":174},[72,607,608],{"class":78},"  //   default: () => [],\n",[72,610,611],{"class":74,"line":186},[72,612,613],{"class":78},"  // },\n",[72,615,616,618,620],{"class":74,"line":191},[72,617,177],{"class":92},[72,619,180],{"class":85},[72,621,183],{"class":85},[72,623,624],{"class":74,"line":197},[72,625,122],{"emptyLinePlaceholder":121},[72,627,628],{"class":74,"line":213},[72,629,630],{"class":78},"// 直接继承 Element Plus 的运行时 emits 定义\n",[72,632,633,635,637,639,641],{"class":74,"line":218},[72,634,128],{"class":85},[72,636,131],{"class":85},[72,638,322],{"class":134},[72,640,138],{"class":85},[72,642,141],{"class":92},[72,644,645,647],{"class":74,"line":224},[72,646,585],{"class":85},[72,648,649],{"class":92},"popoverEmits,\n",[72,651,652],{"class":74,"line":234},[72,653,654],{"class":78},"  // 新增 emits\n",[72,656,657,659,661,663,665,667,669,671,673,675,677,679,681,683,685],{"class":74,"line":258},[72,658,332],{"class":204},[72,660,335],{"class":92},[72,662,280],{"class":267},[72,664,271],{"class":85},[72,666,285],{"class":134},[72,668,277],{"class":92},[72,670,346],{"class":267},[72,672,271],{"class":85},[72,674,295],{"class":134},[72,676,298],{"class":92},[72,678,301],{"class":85},[72,680,357],{"class":85},[72,682,360],{"class":92},[72,684,363],{"class":204},[72,686,366],{"class":92},[72,688,689,691,693],{"class":74,"line":310},[72,690,177],{"class":92},[72,692,180],{"class":85},[72,694,183],{"class":85},[72,696,697],{"class":74,"line":315},[72,698,122],{"emptyLinePlaceholder":121},[72,700,701],{"class":74,"line":329},[72,702,703],{"class":78},"// 类型定义\n",[72,705,706,708,710,712,714,717,720],{"class":74,"line":369},[72,707,128],{"class":85},[72,709,89],{"class":85},[72,711,205],{"class":204},[72,713,138],{"class":85},[72,715,716],{"class":204}," PopoverProps",[72,718,719],{"class":85}," &",[72,721,141],{"class":92},[72,723,725,728,731,734,737,740,742,745,747,750,752,754],{"class":74,"line":724},24,[72,726,727],{"class":267},"  items",[72,729,730],{"class":85},"?:",[72,732,733],{"class":204}," Array",[72,735,736],{"class":92},"\u003C{ ",[72,738,739],{"class":267},"label",[72,741,271],{"class":85},[72,743,744],{"class":134}," string",[72,746,277],{"class":92},[72,748,749],{"class":267},"value",[72,751,271],{"class":85},[72,753,295],{"class":134},[72,755,756],{"class":92}," }>\n",[72,758,760],{"class":74,"line":759},25,[72,761,762],{"class":92},"}\n",[72,764,766],{"class":74,"line":765},26,[72,767,122],{"emptyLinePlaceholder":121},[72,769,771,773,775,778,780,783,785],{"class":74,"line":770},27,[72,772,128],{"class":85},[72,774,89],{"class":85},[72,776,777],{"class":204}," PopoverItemsEmits",[72,779,138],{"class":85},[72,781,782],{"class":204}," PopoverEmits",[72,784,719],{"class":85},[72,786,141],{"class":92},[72,788,790,792,794,797,799,802,805,807,809,811,814],{"class":74,"line":789},28,[72,791,332],{"class":267},[72,793,271],{"class":85},[72,795,796],{"class":92}," [",[72,798,280],{"class":204},[72,800,801],{"class":92},": ",[72,803,804],{"class":134},"number",[72,806,277],{"class":92},[72,808,290],{"class":204},[72,810,801],{"class":92},[72,812,813],{"class":134},"any",[72,815,255],{"class":92},[72,817,819],{"class":74,"line":818},29,[72,820,762],{"class":92},[13,822,823],{},"对于不存在的属性元组，可以尝试访问实例的属性",[63,825,827],{"className":65,"code":826,"language":67,"meta":68,"style":68},"import type { PopoverProps } from 'element-plus'\nimport type { PropType } from 'vue'\n// popover-items.ts\nimport { ElPopover } from 'element-plus'\n\n// 从组件实例获取 props 定义\nconst elPopoverProps = (ElPopover as any).props ?? {}\nconst elPopoverEmits = (ElPopover as any).emits ?? {}\n\nexport const popoverItemsProps = {\n  ...elPopoverProps,\n  // 新增 props\n  items: {\n    type: Array as PropType\u003CArray\u003C{ label: string, value: any }>>,\n    default: () => [],\n  },\n} as const\n\nexport const popoverItemsEmits = {\n  ...elPopoverEmits,\n  select: (idx: number, _vNode: any) => !Number.isNaN(idx),\n} as const\n\nexport type PopoverItemsProps = PopoverProps & {\n  items?: Array\u003C{ label: string, value: any }>\n}\n",[29,828,829,841,854,858,868,872,877,902,924,928,940,947,951,956,990,1003,1008,1016,1020,1032,1039,1071,1079,1083,1099,1125],{"__ignoreMap":68},[72,830,831,833,835,837,839],{"class":74,"line":75},[72,832,86],{"class":85},[72,834,89],{"class":85},[72,836,430],{"class":92},[72,838,96],{"class":85},[72,840,100],{"class":99},[72,842,843,845,847,850,852],{"class":74,"line":82},[72,844,86],{"class":85},[72,846,89],{"class":85},[72,848,849],{"class":92}," { PropType } ",[72,851,96],{"class":85},[72,853,448],{"class":99},[72,855,856],{"class":74,"line":103},[72,857,79],{"class":78},[72,859,860,862,864,866],{"class":74,"line":118},[72,861,86],{"class":85},[72,863,93],{"class":92},[72,865,96],{"class":85},[72,867,100],{"class":99},[72,869,870],{"class":74,"line":125},[72,871,122],{"emptyLinePlaceholder":121},[72,873,874],{"class":74,"line":144},[72,875,876],{"class":78},"// 从组件实例获取 props 定义\n",[72,878,879,881,884,886,889,891,893,896,899],{"class":74,"line":150},[72,880,390],{"class":85},[72,882,883],{"class":134}," elPopoverProps",[72,885,138],{"class":85},[72,887,888],{"class":92}," (ElPopover ",[72,890,180],{"class":85},[72,892,295],{"class":134},[72,894,895],{"class":92},").props ",[72,897,898],{"class":85},"??",[72,900,901],{"class":92}," {}\n",[72,903,904,906,909,911,913,915,917,920,922],{"class":74,"line":156},[72,905,390],{"class":85},[72,907,908],{"class":134}," elPopoverEmits",[72,910,138],{"class":85},[72,912,888],{"class":92},[72,914,180],{"class":85},[72,916,295],{"class":134},[72,918,919],{"class":92},").emits ",[72,921,898],{"class":85},[72,923,901],{"class":92},[72,925,926],{"class":74,"line":162},[72,927,122],{"emptyLinePlaceholder":121},[72,929,930,932,934,936,938],{"class":74,"line":168},[72,931,128],{"class":85},[72,933,131],{"class":85},[72,935,135],{"class":134},[72,937,138],{"class":85},[72,939,141],{"class":92},[72,941,942,944],{"class":74,"line":174},[72,943,585],{"class":85},[72,945,946],{"class":92},"elPopoverProps,\n",[72,948,949],{"class":74,"line":186},[72,950,593],{"class":78},[72,952,953],{"class":74,"line":191},[72,954,955],{"class":92},"  items: {\n",[72,957,958,961,963,966,968,971,973,975,977,979,981,983,985,987],{"class":74,"line":197},[72,959,960],{"class":92},"    type: Array ",[72,962,180],{"class":85},[72,964,965],{"class":204}," PropType",[72,967,243],{"class":92},[72,969,970],{"class":204},"Array",[72,972,736],{"class":92},[72,974,739],{"class":267},[72,976,271],{"class":85},[72,978,744],{"class":134},[72,980,277],{"class":92},[72,982,749],{"class":267},[72,984,271],{"class":85},[72,986,295],{"class":134},[72,988,989],{"class":92}," }>>,\n",[72,991,992,995,998,1000],{"class":74,"line":213},[72,993,994],{"class":204},"    default",[72,996,997],{"class":92},": () ",[72,999,301],{"class":85},[72,1001,1002],{"class":92}," [],\n",[72,1004,1005],{"class":74,"line":218},[72,1006,1007],{"class":92},"  },\n",[72,1009,1010,1012,1014],{"class":74,"line":224},[72,1011,177],{"class":92},[72,1013,180],{"class":85},[72,1015,183],{"class":85},[72,1017,1018],{"class":74,"line":234},[72,1019,122],{"emptyLinePlaceholder":121},[72,1021,1022,1024,1026,1028,1030],{"class":74,"line":258},[72,1023,128],{"class":85},[72,1025,131],{"class":85},[72,1027,322],{"class":134},[72,1029,138],{"class":85},[72,1031,141],{"class":92},[72,1033,1034,1036],{"class":74,"line":310},[72,1035,585],{"class":85},[72,1037,1038],{"class":92},"elPopoverEmits,\n",[72,1040,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069],{"class":74,"line":315},[72,1042,332],{"class":204},[72,1044,335],{"class":92},[72,1046,280],{"class":267},[72,1048,271],{"class":85},[72,1050,285],{"class":134},[72,1052,277],{"class":92},[72,1054,346],{"class":267},[72,1056,271],{"class":85},[72,1058,295],{"class":134},[72,1060,298],{"class":92},[72,1062,301],{"class":85},[72,1064,357],{"class":85},[72,1066,360],{"class":92},[72,1068,363],{"class":204},[72,1070,366],{"class":92},[72,1072,1073,1075,1077],{"class":74,"line":329},[72,1074,177],{"class":92},[72,1076,180],{"class":85},[72,1078,183],{"class":85},[72,1080,1081],{"class":74,"line":369},[72,1082,122],{"emptyLinePlaceholder":121},[72,1084,1085,1087,1089,1091,1093,1095,1097],{"class":74,"line":724},[72,1086,128],{"class":85},[72,1088,89],{"class":85},[72,1090,205],{"class":204},[72,1092,138],{"class":85},[72,1094,716],{"class":204},[72,1096,719],{"class":85},[72,1098,141],{"class":92},[72,1100,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123],{"class":74,"line":759},[72,1102,727],{"class":267},[72,1104,730],{"class":85},[72,1106,733],{"class":204},[72,1108,736],{"class":92},[72,1110,739],{"class":267},[72,1112,271],{"class":85},[72,1114,744],{"class":134},[72,1116,277],{"class":92},[72,1118,749],{"class":267},[72,1120,271],{"class":85},[72,1122,295],{"class":134},[72,1124,756],{"class":92},[72,1126,1127],{"class":74,"line":765},[72,1128,762],{"class":92},[1130,1131,1132],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}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":68,"searchDepth":118,"depth":118,"links":1134},[1135],{"id":509,"depth":118,"text":509},"2025-12-20","md",{},"/engineering/vue-typescript-pass-through-types",{"title":5,"description":15},"engineering/透传时的类型声明",[1143,1144],"Vue","TypeScript","DuXa2LcfZ2q2oZUrSNFBxE4tWtUSspd30ko0tA3byog",1776757930045]