mirror of https://github.com/vuejs/core.git
fix(compiler-sfc): accept `StringLiteral` node in `defineEmit` tuple syntax (#8041)
close #8040
This commit is contained in:
parent
5531ff4eb0
commit
3ccbea08e0
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue