})
})
+ test('declare global with indexed access type', () => {
+ const files = {
+ '/global.d.ts': `
+ declare global {
+ type Options = {
+ code: {
+ selected: boolean
+ }
+ }
+ }`,
+ }
+ const { props } = resolve(`defineProps<Options["code"]>()`, files, {
+ globalTypeFiles: Object.keys(files),
+ })
+
+ expect(props).toStrictEqual({
+ selected: ['Boolean'],
+ })
+ })
+
// #9871
test('shared generics with different args', () => {
const files = {
case 'TSInterfaceDeclaration':
case 'TSEnumDeclaration':
case 'TSModuleDeclaration': {
+ // Handle `declare global { ... }` blocks by recursively processing their contents
+ if (node.type === 'TSModuleDeclaration' && node.global) {
+ const body = node.body as TSModuleBlock
+ for (const s of body.body) {
+ if (s.type === 'ExportNamedDeclaration' && s.declaration) {
+ recordType(s.declaration, types, declares)
+ } else {
+ recordType(s, types, declares)
+ }
+ }
+ break
+ }
const id = overwriteId || getId(node.id)
let existing = types[id]
if (existing) {