Browse Source

feat(test-app): configure TypeScript for vue-facing-decorator compatibility

- Add experimentalDecorators and emitDecoratorMetadata to tsconfig.app.json
- Configure useDefineForClassFields: false for proper class field handling
- Add comprehensive type declarations for vue-facing-decorator@3.0.4
- Create global type declarations for Capacitor and DailyNotification plugin
- Add reflect-metadata support for decorator functionality

Enables proper TypeScript support for Class API components.
master
Matthew Raymer 5 days ago
parent
commit
7805aef198
  1. 57
      test-apps/daily-notification-test/src/env.d.ts
  2. 7
      test-apps/daily-notification-test/src/globals.d.ts
  3. 43
      test-apps/daily-notification-test/src/types/global.d.ts
  4. 12
      test-apps/daily-notification-test/tsconfig.app.json

57
test-apps/daily-notification-test/src/env.d.ts

@ -0,0 +1,57 @@
/// <reference types="vite/client" />
declare module '*.vue' {
import type { DefineComponent } from 'vue'
const component: DefineComponent<{}, {}, any>
export default component
}
// Vue-facing-decorator type declarations
declare module 'vue-facing-decorator' {
import { ComponentOptions } from 'vue'
export interface ComponentOptionsWithProps<T = any> extends ComponentOptions<T> {
props?: any
}
export function Component(options?: any): any
export function toNative<T>(component: T): T
export class Vue {
$emit(event: string, ...args: any[]): void
$props: any
$data: any
$refs: any
$slots: any
$scopedSlots: any
$attrs: any
$listeners: any
$parent: Vue | null
$root: Vue
$children: Vue[]
$el: Element | undefined
$options: ComponentOptions
$isServer: boolean
$ssrContext: any
$vnode: any
$createElement: any
$mount: any
$forceUpdate: () => void
$destroy: () => void
$nextTick: (callback?: () => void) => Promise<void>
$set: (target: any, key: string | number, value: any) => void
$delete: (target: any, key: string | number) => void
$watch: (expOrFn: string | Function, callback: Function, options?: any) => Function
$on: (event: string | string[], callback: Function) => Vue
$once: (event: string | string[], callback: Function) => Vue
$off: (event?: string | string[], callback?: Function) => Vue
}
export function Prop(options?: any): PropertyDecorator
export function Emit(event?: string): MethodDecorator
export function Watch(path: string, options?: any): MethodDecorator
export function Inject(key?: string | symbol): PropertyDecorator
export function Provide(key?: string | symbol): PropertyDecorator
export function Model(event?: string, options?: any): PropertyDecorator
export function Ref(refKey?: string): PropertyDecorator
}

7
test-apps/daily-notification-test/src/globals.d.ts

@ -0,0 +1,7 @@
export {}
declare global {
interface Window {
Capacitor?: any
}
}

43
test-apps/daily-notification-test/src/types/global.d.ts

@ -0,0 +1,43 @@
/**
* Global Type Declarations
*
* Type definitions for global objects and plugins
*
* @author Matthew Raymer
* @version 1.0.0
*/
declare global {
interface Window {
DailyNotification?: {
checkStatus(): Promise<{
canScheduleNow: boolean
postNotificationsGranted: boolean
channelEnabled: boolean
channelImportance: number
channelId: string
exactAlarmsGranted: boolean
exactAlarmsSupported: boolean
androidVersion: number
nextScheduledAt: number
}>
scheduleNotification(options: {
title: string
body: string
scheduledTime: number
}): Promise<void>
cancelNotification(id: string): Promise<void>
requestPermissions(): Promise<boolean>
}
Capacitor?: {
Plugins?: {
DailyNotification?: any
Clipboard?: {
write(options: { string: string }): Promise<void>
}
}
}
}
}
export {}

12
test-apps/daily-notification-test/tsconfig.app.json

@ -4,9 +4,21 @@
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "Bundler",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"useDefineForClassFields": false,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"skipLibCheck": true,
"strict": false,
"noImplicitAny": false,
"noImplicitReturns": false,
"noImplicitThis": false,
"noUnusedLocals": false,
"noUnusedParameters": false,
"paths": {
"@/*": ["./src/*"]
}

Loading…
Cancel
Save