import packageJSON from '../package.json'; import type { ComponentRenderProxy, VNode, VNodeChild, SetupContext, EmitsOptions, ObjectEmitsOptions, PropType as VuePropType, } from 'vue'; import type { TinyMCE } from 'tinymce'; declare global { const __APP_INFO__: { pkg: typeof packageJSON; lastBuildTime: string; }; const tinymce: TinyMCE; // declare interface Window { // // Global vue app instance // __APP__: App; // } // vue declare type PropType = VuePropType; declare type VueNode = VNodeChild | JSX.Element; export type Writable = { -readonly [P in keyof T]: T[P]; }; type RemoveIndex = { [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K]; }; declare type Nullable = T | null; declare type NonNullable = T extends null | undefined ? never : T; declare type Recordable = Record; declare type Objectable = { [P in keyof T]: T[P]; } & Recordable; declare type Key = string | number; declare type ReadonlyRecordable = { readonly [key: string]: T; }; declare type Indexable = { [key: string]: T; }; declare type DeepPartial = { [P in keyof T]?: DeepPartial; }; declare type TimeoutHandle = ReturnType; declare type IntervalHandle = ReturnType; declare interface ChangeEvent extends Event { target: HTMLInputElement; } declare interface WheelEvent { path?: EventTarget[]; } declare function parseInt(s: string | number, radix?: number): number; declare function parseFloat(string: string | number): number; declare type EmitFn = SetupContext['emit']; /** copy from `@vue/runtime-core` */ declare type EmitsToProps = T extends string[] ? { [K in `on${Capitalize}`]?: (...args: any[]) => any; } : T extends ObjectEmitsOptions ? { [K in `on${Capitalize}`]?: K extends `on${infer C}` ? ( ...args: T[Uncapitalize] extends (...args: infer P) => any ? P : T[Uncapitalize] extends null ? any[] : never ) => any : never; } : {}; namespace JSX { // tslint:disable no-empty-interface type Element = VNode; // tslint:disable no-empty-interface type ElementClass = ComponentRenderProxy; interface ElementAttributesProperty { $props: any; } interface IntrinsicElements { [elem: string]: any; } interface IntrinsicAttributes { [elem: string]: any; } } } declare module 'vue' { export type JSXComponent = | { new (): ComponentPublicInstance } | FunctionalComponent; }