Skip to content

Commit d08bed1

Browse files
committed
feat: autofix in define-props-declaration: runtime syntax to type-based syntax (#2465)
handle union type
1 parent 207477e commit d08bed1

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

Diff for: lib/rules/define-props-declaration.js

+10
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,16 @@ function optionGetType(node, sourceCode) {
110110

111111
return sourceCode.getText(typeArgument)
112112
}
113+
case 'LogicalExpression': {
114+
if (node.operator === '||') {
115+
const left = optionGetType(node.left, sourceCode)
116+
const right = optionGetType(node.right, sourceCode)
117+
if (left && right) {
118+
return `${left} | ${right}`
119+
}
120+
}
121+
return sourceCode.getText(node)
122+
}
113123
default: {
114124
return sourceCode.getText(node)
115125
}

Diff for: tests/lib/rules/define-props-declaration.js

+24
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,30 @@ tester.run('define-props-declaration', rule, {
588588
}
589589
]
590590
},
591+
// Union type (Number || String)
592+
{
593+
filename: 'test.vue',
594+
code: `
595+
<script setup lang="ts">
596+
const props = defineProps({
597+
kind: {
598+
type: Number || String
599+
}
600+
})
601+
</script>
602+
`,
603+
output: `
604+
<script setup lang="ts">
605+
const props = defineProps<{ kind: number | string }>()
606+
</script>
607+
`,
608+
errors: [
609+
{
610+
message: 'Use type-based declaration instead of runtime declaration.',
611+
line: 3
612+
}
613+
]
614+
},
591615
// Some unhandled expression type
592616
{
593617
filename: 'test.vue',

0 commit comments

Comments
 (0)