@@ -52,6 +52,15 @@ module.exports = {
52
52
schema : [
53
53
{
54
54
enum : [ 'type-based' , 'runtime' ]
55
+ } ,
56
+ {
57
+ type : 'object' ,
58
+ properties : {
59
+ separateInterface : {
60
+ type : 'boolean' ,
61
+ default : false
62
+ }
63
+ }
55
64
}
56
65
] ,
57
66
messages : {
@@ -156,6 +165,8 @@ module.exports = {
156
165
}
157
166
158
167
const defineType = context . options [ 0 ] || 'type-based'
168
+ const separateInterface = context . options [ 1 ] ?. separateInterface || false
169
+
159
170
return utils . defineScriptSetupVisitor ( context , {
160
171
onDefinePropsEnter ( node , props ) {
161
172
switch ( defineType ) {
@@ -194,15 +205,28 @@ module.exports = {
194
205
const definePropsType = `{ ${ propTypes
195
206
. map (
196
207
( { name, type, required, defaultValue } ) =>
197
- `${ name } ${ ( required === false || defaultValue ) ? '?' : '' } : ${ type } `
208
+ `${ name } ${ required === false || defaultValue ? '?' : '' } : ${ type } `
198
209
)
199
210
. join ( ', ' ) } }`
200
211
201
212
yield fixer . replaceText ( node . arguments [ 0 ] , '' )
202
- yield fixer . insertTextAfter (
203
- node . callee ,
204
- `<${ definePropsType } >`
205
- )
213
+
214
+ if ( separateInterface ) {
215
+ const variableDeclarationNode = node . parent . parent
216
+ if ( ! variableDeclarationNode ) return
217
+
218
+ yield fixer . insertTextBefore (
219
+ variableDeclarationNode ,
220
+ `interface Props ${ definePropsType . replaceAll ( ';' , ',' ) } ; `
221
+ )
222
+ yield fixer . insertTextAfter ( node . callee , `<Props>` )
223
+ } else {
224
+ yield fixer . insertTextAfter (
225
+ node . callee ,
226
+ `<${ definePropsType } >`
227
+ )
228
+ }
229
+
206
230
const defaults = propTypes . filter (
207
231
( { defaultValue } ) => defaultValue
208
232
)
0 commit comments