[{"data":1,"prerenderedAt":400},["ShallowReactive",2],{"navigation_docs":3,"diagnostic-content-VUE0016":44},[4,8,12,16,20,24,28,32,36,40],{"title":5,"path":6,"stem":7},"CLI","\u002Fcli","1.cli",{"title":9,"path":10,"stem":11},"Nuxt","\u002Fnuxt","2.nuxt",{"title":13,"path":14,"stem":15},"Vue","\u002Fvue","3.vue",{"title":17,"path":18,"stem":19},"Vite","\u002Fvite","4.vite",{"title":21,"path":22,"stem":23},"Nitro","\u002Fnitro","5.nitro",{"title":25,"path":26,"stem":27},"TypeScript","\u002Ftypescript","6.typescript",{"title":29,"path":30,"stem":31},"shadcn","\u002Fshadcn","7.shadcn",{"title":33,"path":34,"stem":35},"Package","\u002Fpackage","8.package",{"title":37,"path":38,"stem":39},"Extending Doctor","\u002Fextending","9.extending",{"title":41,"path":42,"stem":43},"Pinia","\u002Fpinia","9.pinia",{"id":45,"title":46,"body":47,"category":53,"code":391,"description":392,"docsUrl":54,"extension":393,"fix":394,"framework":104,"meta":395,"navigation":280,"pack":56,"path":396,"ruleId":57,"rulePath":58,"seo":397,"severity":59,"source":60,"sourceUrl":61,"stem":398,"why":70,"__hash__":399},"diagnostics\u002Fdiagnostics\u002FVUE0016.md","VUE0016: Prefer TypeScript props declarations",{"type":48,"value":49,"toc":381},"minimark",[50,62,67,71,75,87,91,96,99,212,215,313,317,320,350,354,366,370,378],[51,52],"rule-metadata",{"category":53,"docsUrl":54,"fix":55,"pack":56,"ruleId":57,"rulePath":58,"severity":59,"source":60,"sourceUrl":61},"style","https:\u002F\u002Fvuejs.org\u002Fapi\u002Fsfc-script-setup.html#type-only-props-emit-declarations","suggestion","vite-doctor\u002Fvue","vue\u002Fstyle\u002Fprefer-type-props","\u002Fvue\u002Frules\u002Fstyle\u002Fprefer-type-props","warn","src\u002Frule-packs\u002Fvue\u002Frules\u002Fvue\u002Fprefer-type-props.ts","https:\u002F\u002Fgithub.com\u002Fonmax\u002Fvite-doctor\u002Fblob\u002Fmain\u002Fsrc\u002Frule-packs\u002Fvue\u002Frules\u002Fvue\u002Fprefer-type-props.ts",[63,64,66],"h2",{"id":65},"why-it-happens","Why it happens",[68,69,70],"p",{},"Runtime prop declarations duplicate information TypeScript can already express, and they make prop contracts harder to reuse across components, composables, and tests.",[63,72,74],{"id":73},"fix","Fix",[68,76,77,78,82,83,86],{},"Use ",[79,80,81],"code",{},"defineProps\u003CProps>()"," or ",[79,84,85],{},"defineProps\u003C{ foo: string }>()"," instead of runtime props objects when the component already uses TypeScript.",[63,88,90],{"id":89},"example","Example",[92,93,95],"h3",{"id":94},"declare-props-with-typescript","Declare props with TypeScript",[68,97,98],{},"Before",[100,101,106],"pre",{"className":102,"code":103,"language":104,"meta":105,"style":105},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst props = defineProps({\n  title: String,\n  count: Number,\n})\n\u003C\u002Fscript>\n","vue","",[79,107,108,143,165,180,193,202],{"__ignoreMap":105},[109,110,113,117,121,125,128,131,134,138,140],"span",{"class":111,"line":112},"line",1,[109,114,116],{"class":115},"sMK4o","\u003C",[109,118,120],{"class":119},"swJcz","script",[109,122,124],{"class":123},"spNyl"," setup",[109,126,127],{"class":123}," lang",[109,129,130],{"class":115},"=",[109,132,133],{"class":115},"\"",[109,135,137],{"class":136},"sfazB","ts",[109,139,133],{"class":115},[109,141,142],{"class":115},">\n",[109,144,146,149,153,155,159,162],{"class":111,"line":145},2,[109,147,148],{"class":123},"const",[109,150,152],{"class":151},"sTEyZ"," props ",[109,154,130],{"class":115},[109,156,158],{"class":157},"s2Zo4"," defineProps",[109,160,161],{"class":151},"(",[109,163,164],{"class":115},"{\n",[109,166,168,171,174,177],{"class":111,"line":167},3,[109,169,170],{"class":119},"  title",[109,172,173],{"class":115},":",[109,175,176],{"class":151}," String",[109,178,179],{"class":115},",\n",[109,181,183,186,188,191],{"class":111,"line":182},4,[109,184,185],{"class":119},"  count",[109,187,173],{"class":115},[109,189,190],{"class":151}," Number",[109,192,179],{"class":115},[109,194,196,199],{"class":111,"line":195},5,[109,197,198],{"class":115},"}",[109,200,201],{"class":151},")\n",[109,203,205,208,210],{"class":111,"line":204},6,[109,206,207],{"class":115},"\u003C\u002F",[109,209,120],{"class":119},[109,211,142],{"class":115},[68,213,214],{},"After",[100,216,218],{"className":102,"code":217,"language":104,"meta":105,"style":105},"\u003Cscript setup lang=\"ts\">\ninterface Props {\n  title: string\n  count?: number\n}\n\nconst props = defineProps\u003CProps>()\n\u003C\u002Fscript>\n",[79,219,220,240,252,261,271,276,282,304],{"__ignoreMap":105},[109,221,222,224,226,228,230,232,234,236,238],{"class":111,"line":112},[109,223,116],{"class":115},[109,225,120],{"class":119},[109,227,124],{"class":123},[109,229,127],{"class":123},[109,231,130],{"class":115},[109,233,133],{"class":115},[109,235,137],{"class":136},[109,237,133],{"class":115},[109,239,142],{"class":115},[109,241,242,245,249],{"class":111,"line":145},[109,243,244],{"class":123},"interface",[109,246,248],{"class":247},"sBMFI"," Props",[109,250,251],{"class":115}," {\n",[109,253,254,256,258],{"class":111,"line":167},[109,255,170],{"class":119},[109,257,173],{"class":115},[109,259,260],{"class":247}," string\n",[109,262,263,265,268],{"class":111,"line":182},[109,264,185],{"class":119},[109,266,267],{"class":115},"?:",[109,269,270],{"class":247}," number\n",[109,272,273],{"class":111,"line":195},[109,274,275],{"class":115},"}\n",[109,277,278],{"class":111,"line":204},[109,279,281],{"emptyLinePlaceholder":280},true,"\n",[109,283,285,287,289,291,293,295,298,301],{"class":111,"line":284},7,[109,286,148],{"class":123},[109,288,152],{"class":151},[109,290,130],{"class":115},[109,292,158],{"class":157},[109,294,116],{"class":115},[109,296,297],{"class":247},"Props",[109,299,300],{"class":115},">",[109,302,303],{"class":151},"()\n",[109,305,307,309,311],{"class":111,"line":306},8,[109,308,207],{"class":115},[109,310,120],{"class":119},[109,312,142],{"class":115},[63,314,316],{"id":315},"verify-the-fix","Verify the fix",[68,318,319],{},"Run only this rule after editing so the report stays focused on the diagnostic you are closing:",[100,321,325],{"className":322,"code":323,"language":324,"meta":105,"style":105},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm vite-doctor . --framework vue --rules vue\u002Fstyle\u002Fprefer-type-props\n","bash",[79,326,327],{"__ignoreMap":105},[109,328,329,332,335,338,341,344,347],{"class":111,"line":112},[109,330,331],{"class":247},"pnpm",[109,333,334],{"class":136}," vite-doctor",[109,336,337],{"class":136}," .",[109,339,340],{"class":136}," --framework",[109,342,343],{"class":136}," vue",[109,345,346],{"class":136}," --rules",[109,348,349],{"class":136}," vue\u002Fstyle\u002Fprefer-type-props\n",[63,351,353],{"id":352},"useful-links","Useful links",[355,356,357],"ul",{},[358,359,360],"li",{},[361,362,365],"a",{"href":54,"rel":363},[364],"nofollow","Upstream docs",[63,367,369],{"id":368},"related-rule","Related rule",[355,371,372],{},[358,373,374],{},[361,375,376],{"href":58},[79,377,57],{},[53,379,380],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":105,"searchDepth":145,"depth":145,"links":382},[383,384,385,388,389,390],{"id":65,"depth":145,"text":66},{"id":73,"depth":145,"text":74},{"id":89,"depth":145,"text":90,"children":386},[387],{"id":94,"depth":167,"text":95},{"id":315,"depth":145,"text":316},{"id":352,"depth":145,"text":353},{"id":368,"depth":145,"text":369},"VUE0016","Use type-only defineProps declarations in TypeScript \u003Cscript setup> components.","md","Use defineProps\u003CProps>() or defineProps\u003C{ foo: string }>() instead of runtime props objects when the component already uses TypeScript.",{},"\u002Fdiagnostics\u002Fvue0016",{"title":46,"description":392},"diagnostics\u002FVUE0016","8mKEV-bGwvp-lTJMSAyk2NwQ4bQoIBbHwaUfExc3jRo",1791309482914]