Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
hiyuki authored Dec 11, 2023
2 parents c6312a5 + 1055fcc commit cdef26f
Showing 1 changed file with 26 additions and 33 deletions.
59 changes: 26 additions & 33 deletions packages/core/@types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,30 +24,33 @@ type UnionToIntersection<U> = (U extends any
? (k: U) => void
: never) extends ((k: infer I) => void)
? I
: never;
: never

type ArrayType<T extends any[]> = T extends Array<infer R> ? R : never;
type ArrayType<T extends any[]> = T extends Array<infer R> ? R : never

// Mpx types
type Data = object | (() => object)

export type PropType<T> = T & (
T extends string
export type PropType<T> = {
__type: T
} & (
T extends String
? StringConstructor
: T extends number
: T extends number
? NumberConstructor
: T extends boolean
? BooleanConstructor
: T extends any[]
? ArrayConstructor
: T extends object
: T extends object
? ObjectConstructor
: never )
: never
)

type FullPropType<T> = {
type: PropType<T>;
value?: T;
optionalTypes?: PropType<T>[];
type: PropType<T>
value?: T
optionalTypes?: WechatMiniprogram.Component.ShortProperty[]
}

interface Properties {
Expand Down Expand Up @@ -80,27 +83,17 @@ interface WatchField {

type GetDataType<T> = T extends () => any ? ReturnType<T> : T

type PropValueType<Def> = Def extends FullPropType<infer T>
? T
: Def extends PropType<infer T>
? T
: Def extends {
type: (...args: any[]) => infer T;
optionalType?: ((...args: any[]) => infer T)[];
value?: infer T;
}
? T
: Def extends (...args: any[]) => infer T
? T
: any;

type GetPropsType<T> = {
readonly [K in keyof T]: PropValueType<T[K]>
type GetPropsType<T extends Properties> = {
readonly [K in keyof T]: T[K] extends FullPropType<infer V>
? V
: T[K] extends PropType<infer V>
? V
: WechatMiniprogram.Component.PropertyToData<T[K]>
}

type RequiredPropertyNames<T> = {
[K in keyof T]-?: T[K] extends undefined ? never : K
}[keyof T];
}[keyof T]

type RequiredPropertiesForUnion<T> = T extends object ? Pick<T, RequiredPropertyNames<T>> : never

Expand Down Expand Up @@ -131,7 +124,7 @@ interface Context {
createIntersectionObserver: WechatMiniprogram.Component.InstanceMethods<Record<string, any>>['createIntersectionObserver']
}

interface ComponentOpt<D, P, C, M, Mi extends Array<any>, S extends Record<any, any>> extends Partial<WechatMiniprogram.Component.Lifetimes & WechatMiniprogram.Component.OtherOption> {
interface ComponentOpt<D extends Data, P extends Properties, C, M extends Methods, Mi extends Array<any>, S extends Record<any, any>> extends Partial<WechatMiniprogram.Component.Lifetimes & WechatMiniprogram.Component.OtherOption> {
data?: D
properties?: P
computed?: C
Expand All @@ -149,7 +142,7 @@ interface ComponentOpt<D, P, C, M, Mi extends Array<any>, S extends Record<any,
[index: string]: any
}

type PageOpt<D, P, C, M, Mi extends Array<any>, S extends Record<any, any>> =
type PageOpt<D extends Data, P extends Properties, C, M extends Methods, Mi extends Array<any>, S extends Record<any, any>> =
ComponentOpt<D, P, C, M, Mi, S>
& Partial<WechatMiniprogram.Page.ILifetime>

Expand Down Expand Up @@ -286,11 +279,11 @@ interface ImplementOptions {

export function toPureObject<T extends object> (obj: T): T

declare type PluginInstallFunction = (app: Mpx, ...options: any[]) => any;
declare type PluginInstallFunction = (app: Mpx, ...options: any[]) => any

export type Plugin = PluginInstallFunction | {
install: PluginInstallFunction;
};
install: PluginInstallFunction
}

export interface Mpx {
getMixin: typeof getMixin
Expand Down Expand Up @@ -675,7 +668,7 @@ export const ONHIDE: string
export const ONRESIZE: string

declare global {
const defineProps: (<T>(props: T) => Readonly<GetPropsType<T>>) & (<T>() => Readonly<T>)
const defineProps: (<T extends Properties = {}>(props: T) => Readonly<GetPropsType<T>>) & (<T>() => Readonly<T>)
const defineOptions: <D extends Data = {}, P extends Properties = {}, C = {}, M extends Methods = {}, Mi extends Array<any> = [], S extends AnyObject = {}, O extends AnyObject = {}> (opt: ThisTypedComponentOpt<D, P, C, M, Mi, S, O>) => void
const defineExpose: <E extends AnyObject = AnyObject>(exposed?: E) => void
const useContext: () => Context
Expand Down

0 comments on commit cdef26f

Please sign in to comment.