Skip to content

Commit

Permalink
fix: compatibilities with miniprogram-api-typings
Browse files Browse the repository at this point in the history
  • Loading branch information
boquanfu committed Dec 9, 2024
1 parent 6ac8392 commit 101acb8
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 22 deletions.
38 changes: 27 additions & 11 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,32 @@ import { behavior } from './behavior'

export { behavior, computed, watch } from './behavior'

type FilterUnknownType<T> = WechatMiniprogram.Component.FilterUnknownType<T>

type AllDataAndProperties<
TData extends WechatMiniprogram.Component.DataOption,
TProperty extends WechatMiniprogram.Component.PropertyOption,
TBehavior extends WechatMiniprogram.Component.BehaviorOption,
> = FilterUnknownType<TData> &
WechatMiniprogram.Component.MixinData<TBehavior> &
WechatMiniprogram.Component.MixinProperties<TBehavior> &
WechatMiniprogram.Component.PropertyOptionToData<FilterUnknownType<TProperty>>


type ComputedInstance<
D extends WechatMiniprogram.Component.DataOption,
P extends WechatMiniprogram.Component.PropertyOption,
M extends WechatMiniprogram.Component.MethodOption,
B extends WechatMiniprogram.Component.BehaviorOption,
C extends Record<string, (data: D & { [K in keyof P]: any }) => any>,
TData extends WechatMiniprogram.Component.DataOption,
TProperty extends WechatMiniprogram.Component.PropertyOption,
TMethod extends WechatMiniprogram.Component.MethodOption,
TBehavior extends WechatMiniprogram.Component.BehaviorOption,
TComputed extends Record<string, (data: AllDataAndProperties<TData, TProperty, TBehavior>) => any>,
TCustomProperty extends WechatMiniprogram.IAnyObject = Record<string, never>,
> = WechatMiniprogram.Component.Instance<D, P, M, B, TCustomProperty> & {
data: { [K in keyof C]: ReturnType<C[K]> } & { [K in keyof P]: any }
}
> = WechatMiniprogram.Component.Instance<
TData & { [k in keyof TComputed]: ReturnType<TComputed[k]> },
TProperty,
TMethod,
TBehavior,
TCustomProperty
>

type ComputedOptions<
TData extends WechatMiniprogram.Component.DataOption,
Expand All @@ -21,7 +37,7 @@ type ComputedOptions<
TWatch extends Record<string, (...args: any[]) => void>,
TComputed extends Record<
string,
(data: TData & WechatMiniprogram.Component.PropertyOptionToData<TProperty>) => any
(data: AllDataAndProperties<TData, TProperty, TBehavior>) => any
>,
TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {},
> = (Partial<WechatMiniprogram.Component.Data<TData>> &
Expand All @@ -44,7 +60,7 @@ export function ComponentWithComputed<
TWatch extends Record<string, (...args: any[]) => void>,
TComputed extends Record<
string,
(data: TData & WechatMiniprogram.Component.PropertyOptionToData<TProperty>) => any
(data: AllDataAndProperties<TData, TProperty, TBehavior>) => any
>,
TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {},
>(
Expand All @@ -65,7 +81,7 @@ export function BehaviorWithComputed<
TWatch extends Record<string, (...args: any[]) => void>,
TComputed extends Record<
string,
(data: TData & WechatMiniprogram.Component.PropertyOptionToData<TProperty>) => any
(data: AllDataAndProperties<TData, TProperty, TBehavior>) => any
>,
TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {},
>(
Expand Down
3 changes: 3 additions & 0 deletions test/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -710,6 +710,7 @@ describe('computed behavior', () => {
test('computed and watch inside behaviors', () => {
const behA = BehaviorWithComputed({
behaviors: [computedBehavior],
data: { a: 0 },
computed: {
b(data) {
return data.a * 2
Expand Down Expand Up @@ -794,6 +795,7 @@ describe('computed behavior', () => {
const behB = BehaviorWithComputed({
behaviors: [behA],
data: {
a2: 0,
b1: 10,
},
computed: {
Expand Down Expand Up @@ -899,6 +901,7 @@ describe('computed behavior', () => {
const behA = BehaviorWithComputed({
data: {
a: 1,
b: 0,
},
computed: {
d() {
Expand Down
21 changes: 10 additions & 11 deletions types/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
export { behavior, computed, watch } from './behavior';
type ComputedInstance<D extends WechatMiniprogram.Component.DataOption, P extends WechatMiniprogram.Component.PropertyOption, M extends WechatMiniprogram.Component.MethodOption, B extends WechatMiniprogram.Component.BehaviorOption, C extends Record<string, (data: D & {
[K in keyof P]: any;
}) => any>, TCustomProperty extends WechatMiniprogram.IAnyObject = Record<string, never>> = WechatMiniprogram.Component.Instance<D, P, M, B, TCustomProperty> & {
data: {
[K in keyof C]: ReturnType<C[K]>;
} & {
[K in keyof P]: any;
};
type FilterUnknownType<T> = WechatMiniprogram.Component.FilterUnknownType<T>;
type AllDataAndProperties<TData extends WechatMiniprogram.Component.DataOption, TProperty extends WechatMiniprogram.Component.PropertyOption, TBehavior extends WechatMiniprogram.Component.BehaviorOption> = {
data: FilterUnknownType<TData> & WechatMiniprogram.Component.MixinData<TBehavior> & WechatMiniprogram.Component.MixinProperties<TBehavior> & WechatMiniprogram.Component.PropertyOptionToData<FilterUnknownType<TProperty>>;
properties: FilterUnknownType<TData> & WechatMiniprogram.Component.MixinData<TBehavior> & WechatMiniprogram.Component.MixinProperties<TBehavior> & WechatMiniprogram.Component.PropertyOptionToData<FilterUnknownType<TProperty>>;
};
type ComputedOptions<TData extends WechatMiniprogram.Component.DataOption, TProperty extends WechatMiniprogram.Component.PropertyOption, TMethod extends WechatMiniprogram.Component.MethodOption, TBehavior extends WechatMiniprogram.Component.BehaviorOption, TWatch extends Record<string, (...args: any[]) => void>, TComputed extends Record<string, (data: TData & WechatMiniprogram.Component.PropertyOptionToData<TProperty>) => any>, TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {}> = (Partial<WechatMiniprogram.Component.Data<TData>> & Partial<WechatMiniprogram.Component.Property<TProperty>> & Partial<WechatMiniprogram.Component.Method<TMethod>> & Partial<WechatMiniprogram.Component.Behavior<TBehavior>> & Partial<WechatMiniprogram.Component.OtherOption> & Partial<WechatMiniprogram.Component.Lifetimes> & {
type ComputedInstance<TData extends WechatMiniprogram.Component.DataOption, TProperty extends WechatMiniprogram.Component.PropertyOption, TMethod extends WechatMiniprogram.Component.MethodOption, TBehavior extends WechatMiniprogram.Component.BehaviorOption, TComputed extends Record<string, (data: AllDataAndProperties<TData, TProperty, TBehavior>) => any>, TCustomProperty extends WechatMiniprogram.IAnyObject = Record<string, never>> = WechatMiniprogram.Component.Instance<TData & {
[k in keyof TComputed]: ReturnType<TComputed[k]>;
}, TProperty, TMethod, TBehavior, TCustomProperty>;
type ComputedOptions<TData extends WechatMiniprogram.Component.DataOption, TProperty extends WechatMiniprogram.Component.PropertyOption, TMethod extends WechatMiniprogram.Component.MethodOption, TBehavior extends WechatMiniprogram.Component.BehaviorOption, TWatch extends Record<string, (...args: any[]) => void>, TComputed extends Record<string, (data: AllDataAndProperties<TData, TProperty, TBehavior>) => any>, TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {}> = (Partial<WechatMiniprogram.Component.Data<TData>> & Partial<WechatMiniprogram.Component.Property<TProperty>> & Partial<WechatMiniprogram.Component.Method<TMethod>> & Partial<WechatMiniprogram.Component.Behavior<TBehavior>> & Partial<WechatMiniprogram.Component.OtherOption> & Partial<WechatMiniprogram.Component.Lifetimes> & {
watch?: TWatch;
computed?: TComputed;
template?: string;
}) & ThisType<ComputedInstance<TData, TProperty, TMethod, TBehavior, TComputed, TCustomInstanceProperty>>;
export declare function ComponentWithComputed<TData extends WechatMiniprogram.Component.DataOption, TProperty extends WechatMiniprogram.Component.PropertyOption, TMethod extends WechatMiniprogram.Component.MethodOption, TBehavior extends WechatMiniprogram.Component.BehaviorOption, TWatch extends Record<string, (...args: any[]) => void>, TComputed extends Record<string, (data: TData & WechatMiniprogram.Component.PropertyOptionToData<TProperty>) => any>, TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {}>(options: ComputedOptions<TData, TProperty, TMethod, TBehavior, TWatch, TComputed, TCustomInstanceProperty>): string;
export declare function BehaviorWithComputed<TData extends WechatMiniprogram.Behavior.DataOption, TProperty extends WechatMiniprogram.Behavior.PropertyOption, TMethod extends WechatMiniprogram.Behavior.MethodOption, TBehavior extends WechatMiniprogram.Component.BehaviorOption, TWatch extends Record<string, (...args: any[]) => void>, TComputed extends Record<string, (data: TData & WechatMiniprogram.Component.PropertyOptionToData<TProperty>) => any>, TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {}>(options: ComputedOptions<TData, TProperty, TMethod, TBehavior, TWatch, TComputed, TCustomInstanceProperty>): string;
export declare function ComponentWithComputed<TData extends WechatMiniprogram.Component.DataOption, TProperty extends WechatMiniprogram.Component.PropertyOption, TMethod extends WechatMiniprogram.Component.MethodOption, TBehavior extends WechatMiniprogram.Component.BehaviorOption, TWatch extends Record<string, (...args: any[]) => void>, TComputed extends Record<string, (data: AllDataAndProperties<TData, TProperty, TBehavior>) => any>, TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {}>(options: ComputedOptions<TData, TProperty, TMethod, TBehavior, TWatch, TComputed, TCustomInstanceProperty>): string;
export declare function BehaviorWithComputed<TData extends WechatMiniprogram.Behavior.DataOption, TProperty extends WechatMiniprogram.Behavior.PropertyOption, TMethod extends WechatMiniprogram.Behavior.MethodOption, TBehavior extends WechatMiniprogram.Component.BehaviorOption, TWatch extends Record<string, (...args: any[]) => void>, TComputed extends Record<string, (data: AllDataAndProperties<TData, TProperty, TBehavior>) => any>, TCustomInstanceProperty extends WechatMiniprogram.IAnyObject = {}>(options: ComputedOptions<TData, TProperty, TMethod, TBehavior, TWatch, TComputed, TCustomInstanceProperty>): string;
export declare enum DataTracerMode {
Auto = 0,
Proxy = 1,
Expand Down

0 comments on commit 101acb8

Please sign in to comment.