]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-sfc): fix built-in type resolving in external files
authorEvan You <yyx990803@gmail.com>
Mon, 8 May 2023 04:30:19 +0000 (12:30 +0800)
committerEvan You <yyx990803@gmail.com>
Mon, 8 May 2023 04:30:19 +0000 (12:30 +0800)
close #8244

packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts
packages/compiler-sfc/src/script/resolveType.ts

index 551e10237dc1f616d01e4da1ded51e5b0c148c3d..4b36880bf1beef98a3e9c2bbda7d58a62ff9ebf1 100644 (file)
@@ -475,6 +475,23 @@ describe('resolveType', () => {
       expect(deps && [...deps]).toStrictEqual(Object.keys(files))
     })
 
+    // #8244
+    test('utility type in external file', () => {
+      const files = {
+        '/foo.ts': 'type A = { n?: number }; export type B = Required<A>'
+      }
+      const { props } = resolve(
+        `
+        import { B } from './foo'
+        defineProps<B>()
+      `,
+        files
+      )
+      expect(props).toStrictEqual({
+        n: ['Number']
+      })
+    })
+
     test('relative vue', () => {
       const files = {
         '/foo.vue':
index 2fa8d028c653dc1d93dc34b9a60ee2674496883d..550b6c23767bbd87c39518b3e105b52442f4514b 100644 (file)
@@ -518,7 +518,7 @@ function resolveBuiltin(
   name: GetSetType<typeof SupportedBuiltinsSet>,
   scope: TypeScope
 ): ResolvedElements {
-  const t = resolveTypeElements(ctx, node.typeParameters!.params[0])
+  const t = resolveTypeElements(ctx, node.typeParameters!.params[0], scope)
   switch (name) {
     case 'Partial': {
       const res: ResolvedElements = { props: {}, calls: t.calls }