diff --git a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap index 6c76e5fe75b..0974a1d59a3 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap @@ -790,7 +790,8 @@ export default _defineComponent({ alias: { type: Array, required: true }, method: { type: Function, required: true }, union: { type: [String, Number], required: true }, - literalUnion: { type: [String, String], required: true }, + literalUnion: { type: String, required: true }, + literalUnionNumber: { type: Number, required: true }, literalUnionMixed: { type: [String, Number, Boolean], required: true }, intersection: { type: Object, required: true }, foo: { type: [Function, null], required: true } @@ -817,6 +818,7 @@ export default _defineComponent({ union: string | number literalUnion: 'foo' | 'bar' + literalUnionNumber: 1 | 2 | 3 | 4 | 5 literalUnionMixed: 'foo' | 1 | boolean intersection: Test & {} foo: ((item: any) => boolean) | null diff --git a/packages/compiler-sfc/__tests__/compileScript.spec.ts b/packages/compiler-sfc/__tests__/compileScript.spec.ts index 406462f3997..e5be15b076a 100644 --- a/packages/compiler-sfc/__tests__/compileScript.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript.spec.ts @@ -538,6 +538,7 @@ const emit = defineEmits(['a', 'b']) union: string | number literalUnion: 'foo' | 'bar' + literalUnionNumber: 1 | 2 | 3 | 4 | 5 literalUnionMixed: 'foo' | 1 | boolean intersection: Test & {} foo: ((item: any) => boolean) | null @@ -565,8 +566,9 @@ const emit = defineEmits(['a', 'b']) expect(content).toMatch( `union: { type: [String, Number], required: true }` ) + expect(content).toMatch(`literalUnion: { type: String, required: true }`) expect(content).toMatch( - `literalUnion: { type: [String, String], required: true }` + `literalUnionNumber: { type: Number, required: true }` ) expect(content).toMatch( `literalUnionMixed: { type: [String, Number, Boolean], required: true }` @@ -594,6 +596,7 @@ const emit = defineEmits(['a', 'b']) method: BindingTypes.PROPS, union: BindingTypes.PROPS, literalUnion: BindingTypes.PROPS, + literalUnionNumber: BindingTypes.PROPS, literalUnionMixed: BindingTypes.PROPS, intersection: BindingTypes.PROPS, foo: BindingTypes.PROPS diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index 9e4a2ceb85a..5492c8280ea 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -1703,7 +1703,7 @@ function inferRuntimeType( return [ ...new Set( [].concat( - node.types.map(t => inferRuntimeType(t, declaredTypes)) as any + ...(node.types.map(t => inferRuntimeType(t, declaredTypes)) as any) ) ) ] @@ -1716,11 +1716,7 @@ function inferRuntimeType( } function toRuntimeTypeString(types: string[]) { - return types.some(t => t === 'null') - ? `null` - : types.length > 1 - ? `[${types.join(', ')}]` - : types[0] + return types.length > 1 ? `[${types.join(', ')}]` : types[0] } function extractRuntimeEmits(