Browse Source
fix(compiler-sfc): accept `StringLiteral` node in `defineEmit` tuple syntax (#8041)
close #8040
pull/8045/head
-isum
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
34 additions and
3 deletions
-
packages/compiler-sfc/__tests__/__snapshots__/compileScript.spec.ts.snap
-
packages/compiler-sfc/__tests__/compileScript.spec.ts
-
packages/compiler-sfc/src/compileScript.ts
|
|
@ -1457,6 +1457,22 @@ export default /*#__PURE__*/_defineComponent({ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return { emit } |
|
|
|
} |
|
|
|
|
|
|
|
})" |
|
|
|
`; |
|
|
|
|
|
|
|
exports[`SFC compile <script setup> > with TypeScript > defineEmits w/ type (property syntax string literal) 1`] = ` |
|
|
|
"import { defineComponent as _defineComponent } from 'vue' |
|
|
|
|
|
|
|
export default /*#__PURE__*/_defineComponent({ |
|
|
|
emits: [\\"foo:bar\\"], |
|
|
|
setup(__props, { expose: __expose, emit }) { |
|
|
|
__expose(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return { emit } |
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1629,6 +1629,17 @@ const emit = defineEmits(['a', 'b']) |
|
|
|
assertCode(content) |
|
|
|
}) |
|
|
|
|
|
|
|
// #8040
|
|
|
|
test('defineEmits w/ type (property syntax string literal)', () => { |
|
|
|
const { content } = compile(`
|
|
|
|
<script setup lang="ts"> |
|
|
|
const emit = defineEmits<{ 'foo:bar': [] }>() |
|
|
|
</script> |
|
|
|
`)
|
|
|
|
expect(content).toMatch(`emits: ["foo:bar"]`) |
|
|
|
assertCode(content) |
|
|
|
}) |
|
|
|
|
|
|
|
describe('defineSlots()', () => { |
|
|
|
test('basic usage', () => { |
|
|
|
const { content } = compile(`
|
|
|
|
|
|
@ -2316,11 +2316,15 @@ function extractRuntimeEmits( |
|
|
|
hasCallSignature = true |
|
|
|
} |
|
|
|
if (t.type === 'TSPropertySignature') { |
|
|
|
if (t.key.type !== 'Identifier' || t.computed) { |
|
|
|
if (t.key.type === 'Identifier' && !t.computed) { |
|
|
|
emits.add(t.key.name) |
|
|
|
hasProperty = true |
|
|
|
} else if (t.key.type === 'StringLiteral' && !t.computed) { |
|
|
|
emits.add(t.key.value) |
|
|
|
hasProperty = true |
|
|
|
} else { |
|
|
|
error(`defineEmits() type cannot use computed keys.`, t.key) |
|
|
|
} |
|
|
|
emits.add(t.key.name) |
|
|
|
hasProperty = true |
|
|
|
} |
|
|
|
} |
|
|
|
if (hasCallSignature && hasProperty) { |
|
|
|