fix(compiler-sfc): handle keyof operator with index object (#11581) 路 vuejs/core@74d26db (original) (raw)

Original file line number Diff line number Diff line change
@@ -596,6 +596,65 @@ describe('resolveType', () => {
596 596 })
597 597 })
598 598
599 +test('keyof: nested object with number', () => {
600 +const { props } = resolve(
601 +`
602 + interface Type {
603 + deep: {
604 + 1: any
605 + }
606 + }
607 +
608 + defineProps<{
609 + route: keyof Type['deep']
610 + }>()`,
611 +)
612 +
613 +expect(props).toStrictEqual({
614 +route: ['Number'],
615 +})
616 +})
617 +
618 +test('keyof: nested object with string', () => {
619 +const { props } = resolve(
620 +`
621 + interface Type {
622 + deep: {
623 + foo: any
624 + }
625 + }
626 +
627 + defineProps<{
628 + route: keyof Type['deep']
629 + }>()`,
630 +)
631 +
632 +expect(props).toStrictEqual({
633 +route: ['String'],
634 +})
635 +})
636 +
637 +test('keyof: nested object with intermediate', () => {
638 +const { props } = resolve(
639 +`
640 + interface Type {
641 + deep: {
642 + foo: any
643 + }
644 + }
645 +
646 + type Foo = Type['deep']
647 +
648 + defineProps<{
649 + route: keyof Foo
650 + }>()`,
651 +)
652 +
653 +expect(props).toStrictEqual({
654 +route: ['String'],
655 +})
656 +})
657 +
599 658 test('ExtractPropTypes (element-plus)', () => {
600 659 const { props, raw } = resolve(
601 660 `