annil 1.1.1 → 1.2.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/api/DefineComponent/collectOptionsForComponent.d.ts +2 -2
  3. package/dist/api/DefineComponent/collectOptionsForComponent.js +24 -28
  4. package/dist/api/DefineComponent/collectOptionsForComponent.js.map +1 -1
  5. package/dist/api/DefineComponent/index.d.ts +12 -12
  6. package/dist/api/DefineComponent/index.js.map +1 -1
  7. package/dist/api/RootComponent/Computed/ComputedOption.d.ts +2 -2
  8. package/dist/api/RootComponent/Computed/GetComputedDoc.d.ts +2 -2
  9. package/dist/api/RootComponent/Computed/test/normal.test.js +5 -12
  10. package/dist/api/RootComponent/Computed/test/normal.test.js.map +1 -1
  11. package/dist/api/RootComponent/CustomEvents/CustomEventsOption.d.ts +2 -2
  12. package/dist/api/RootComponent/Data/DataConstraint.d.ts +1 -1
  13. package/dist/api/RootComponent/Data/DataOption.d.ts +2 -2
  14. package/dist/api/RootComponent/Data/GetDataDoc.d.ts +1 -4
  15. package/dist/api/RootComponent/Data/test/GetDataDoc.test.d.ts +3 -2
  16. package/dist/api/RootComponent/Data/test/GetDataDoc.test.js +5 -5
  17. package/dist/api/RootComponent/Data/test/GetDataDoc.test.js.map +1 -1
  18. package/dist/api/RootComponent/Data/test/normal.test.js.map +1 -1
  19. package/dist/api/RootComponent/Events/EventsConstraint.d.ts +6 -5
  20. package/dist/api/RootComponent/Events/EventsOption.d.ts +2 -3
  21. package/dist/api/RootComponent/Events/test/normal.test.js +1 -1
  22. package/dist/api/RootComponent/Events/test/normal.test.js.map +1 -1
  23. package/dist/api/RootComponent/Lifetimes/LifetimesConstraint.d.ts +5 -4
  24. package/dist/api/RootComponent/Lifetimes/test/error.test.js.map +1 -1
  25. package/dist/api/RootComponent/PageLifetimes/PageLifetimesOption.d.ts +6 -7
  26. package/dist/api/RootComponent/PageLifetimes/test/error.test.js +3 -1
  27. package/dist/api/RootComponent/PageLifetimes/test/error.test.js.map +1 -1
  28. package/dist/api/RootComponent/PageLifetimes/test/normal.test.js +3 -1
  29. package/dist/api/RootComponent/PageLifetimes/test/normal.test.js.map +1 -1
  30. package/dist/api/RootComponent/RootComponentDoc.d.ts +17 -3
  31. package/dist/api/RootComponent/Store/GeTStoreDoc.d.ts +1 -1
  32. package/dist/api/RootComponent/Store/StoreOption.d.ts +2 -2
  33. package/dist/api/RootComponent/Store/test/normal.test.js.map +1 -1
  34. package/dist/api/RootComponent/Watch/test/WatchProperties.test.js +0 -2
  35. package/dist/api/RootComponent/Watch/test/WatchProperties.test.js.map +1 -1
  36. package/dist/api/RootComponent/index.d.ts +9 -10
  37. package/dist/api/RootComponent/index.js.map +1 -1
  38. package/dist/api/SubComponent/SubData/SubDataConstraint.d.ts +2 -2
  39. package/dist/api/SubComponent/SubData/test/normal.test.js +0 -15
  40. package/dist/api/SubComponent/SubData/test/normal.test.js.map +1 -1
  41. package/dist/api/SubComponent/SubEvents/SubEventsConstraint.d.ts +2 -2
  42. package/dist/api/SubComponent/SubEvents/SubEventsOptions.d.ts +2 -2
  43. package/dist/api/SubComponent/SubEvents/test/error.test.js.map +1 -1
  44. package/dist/api/SubComponent/SubEvents/test/normal.test.js +20 -0
  45. package/dist/api/SubComponent/SubEvents/test/normal.test.js.map +1 -1
  46. package/dist/api/SubComponent/SubInherit/SubInheritConstraint.d.ts +3 -2
  47. package/dist/api/SubComponent/SubInherit/SubInheritOption.d.ts +3 -0
  48. package/dist/api/SubComponent/SubInherit/SubInheritOption.js +2 -0
  49. package/dist/api/SubComponent/SubInherit/SubInheritOption.js.map +1 -0
  50. package/dist/api/SubComponent/SubInherit/test/error.test.js +1 -1
  51. package/dist/api/SubComponent/SubInherit/test/error.test.js.map +1 -1
  52. package/dist/api/SubComponent/SubInherit/test/normal.test.js.map +1 -1
  53. package/dist/api/SubComponent/SubMethods/SubMethodsOption.d.ts +3 -2
  54. package/dist/api/SubComponent/SubMethods/test/error.test.js +6 -0
  55. package/dist/api/SubComponent/SubMethods/test/error.test.js.map +1 -1
  56. package/dist/api/SubComponent/SubMethods/test/normarl.test.js +3 -3
  57. package/dist/api/SubComponent/SubMethods/test/normarl.test.js.map +1 -1
  58. package/dist/api/SubComponent/SubPageLifetimes/SubPageLifetimesOption.d.ts +1 -1
  59. package/dist/api/SubComponent/SubPageLifetimes/test/error.test.d.ts +0 -1
  60. package/dist/api/SubComponent/SubPageLifetimes/test/error.test.js +1 -11
  61. package/dist/api/SubComponent/SubPageLifetimes/test/error.test.js.map +1 -1
  62. package/dist/api/SubComponent/SubPageLifetimes/test/normal.test.d.ts +0 -1
  63. package/dist/api/SubComponent/SubPageLifetimes/test/normal.test.js +1 -25
  64. package/dist/api/SubComponent/SubPageLifetimes/test/normal.test.js.map +1 -1
  65. package/dist/api/SubComponent/SubStore/SubDataConstraint.d.ts +2 -2
  66. package/dist/api/SubComponent/SubStore/SubStoreOption.d.ts +1 -1
  67. package/dist/api/SubComponent/SubStore/test/error.test.js +2 -0
  68. package/dist/api/SubComponent/SubStore/test/error.test.js.map +1 -1
  69. package/dist/api/SubComponent/SubStore/test/normal.test.js +1 -0
  70. package/dist/api/SubComponent/SubStore/test/normal.test.js.map +1 -1
  71. package/dist/api/SubComponent/SubWatch/SubWatchOption.d.ts +2 -1
  72. package/dist/api/SubComponent/SubWatch/test/WatchComputed.test.d.ts +1 -0
  73. package/dist/api/SubComponent/SubWatch/test/WatchComputed.test.js +44 -1
  74. package/dist/api/SubComponent/SubWatch/test/WatchComputed.test.js.map +1 -1
  75. package/dist/api/SubComponent/SubWatch/test/error.test.js +10 -2
  76. package/dist/api/SubComponent/SubWatch/test/error.test.js.map +1 -1
  77. package/dist/api/SubComponent/index.d.ts +19 -13
  78. package/dist/api/SubComponent/index.js.map +1 -1
  79. package/dist/behaviors/BComputedAndWatch/index.js.map +1 -1
  80. package/dist/behaviors/BComputedAndWatch/types.d.ts +1 -0
  81. package/dist/behaviors/BStore.js.map +1 -1
  82. package/dist/behaviors/BbeforeCreated.js.map +1 -1
  83. package/dist/index.d.ts +3 -3
  84. package/dist/index.js +1 -1
  85. package/dist/index.js.map +1 -1
  86. package/dist/types/OfficialTypeAlias.d.ts +1 -1
  87. package/dist/types/RemoveInnerData.d.ts +1 -0
  88. package/dist/types/RemoveInnerData.js +2 -0
  89. package/dist/types/RemoveInnerData.js.map +1 -0
  90. package/dist/utils/InnerMarker.js +1 -1
  91. package/dist/utils/InnerMarker.js.map +1 -1
  92. package/dist/utils/deepClone.js.map +1 -1
  93. package/package.json +4 -2
  94. package/src/api/DefineComponent/collectOptionsForComponent.ts +176 -66
  95. package/src/api/DefineComponent/index.ts +13 -9
  96. package/src/api/RootComponent/Computed/ComputedOption.ts +23 -3
  97. package/src/api/RootComponent/Computed/GetComputedDoc.ts +1 -3
  98. package/src/api/RootComponent/Computed/test/normal.test.ts +9 -19
  99. package/src/api/RootComponent/CustomEvents/CustomEventsOption.ts +26 -22
  100. package/src/api/RootComponent/CustomEvents/test/error.test.ts +5 -5
  101. package/src/api/RootComponent/CustomEvents/test/normal.test.ts +1 -1
  102. package/src/api/RootComponent/Data/DataConstraint.ts +1 -1
  103. package/src/api/RootComponent/Data/DataOption.ts +6 -4
  104. package/src/api/RootComponent/Data/GetDataDoc.ts +1 -18
  105. package/src/api/RootComponent/Data/test/GetDataDoc.test.ts +14 -25
  106. package/src/api/RootComponent/Data/test/error.test.ts +2 -2
  107. package/src/api/RootComponent/Data/test/normal.test.ts +5 -8
  108. package/src/api/RootComponent/Events/EventsConstraint.ts +24 -19
  109. package/src/api/RootComponent/Events/EventsOption.ts +54 -6
  110. package/src/api/RootComponent/Events/test/normal.test.ts +16 -16
  111. package/src/api/RootComponent/Instance/test/properties/mormal.test.ts +1 -1
  112. package/src/api/RootComponent/IsPage/IsPageOption.ts +1 -1
  113. package/src/api/RootComponent/Lifetimes/LifetimesConstraint.ts +11 -8
  114. package/src/api/RootComponent/Lifetimes/LifetimesOption.ts +26 -0
  115. package/src/api/RootComponent/Lifetimes/test/error.test.ts +3 -13
  116. package/src/api/RootComponent/Lifetimes/test/normal.test.ts +1 -1
  117. package/src/api/RootComponent/Methods/MethodsOption.ts +3 -0
  118. package/src/api/RootComponent/PageLifetimes/PageLifetimesOption.ts +21 -10
  119. package/src/api/RootComponent/PageLifetimes/test/error.test.ts +7 -5
  120. package/src/api/RootComponent/PageLifetimes/test/normal.test.ts +9 -10
  121. package/src/api/RootComponent/Properties/PropertiesOption.ts +19 -32
  122. package/src/api/RootComponent/RootComponentDoc.ts +19 -3
  123. package/src/api/RootComponent/Store/GeTStoreDoc.ts +1 -1
  124. package/src/api/RootComponent/Store/StoreOption.ts +14 -2
  125. package/src/api/RootComponent/Store/test/error.test.ts +5 -5
  126. package/src/api/RootComponent/Store/test/normal.test.ts +1 -0
  127. package/src/api/RootComponent/Watch/test/WatchProperties.test.ts +1 -12
  128. package/src/api/RootComponent/index.ts +20 -19
  129. package/src/api/SubComponent/SubComputed/SubComputedOption.ts +0 -1
  130. package/src/api/SubComponent/SubData/SubDataConstraint.ts +2 -3
  131. package/src/api/SubComponent/SubData/SubDataOption.ts +4 -0
  132. package/src/api/SubComponent/SubData/test/error.test.ts +1 -1
  133. package/src/api/SubComponent/SubData/test/normal.test.ts +6 -37
  134. package/src/api/SubComponent/SubEvents/SubEventsConstraint.ts +7 -2
  135. package/src/api/SubComponent/SubEvents/SubEventsOptions.ts +7 -2
  136. package/src/api/SubComponent/SubEvents/test/error.test.ts +5 -4
  137. package/src/api/SubComponent/SubEvents/test/normal.test.ts +31 -4
  138. package/src/api/SubComponent/SubInherit/SubInheritConstraint.ts +6 -3
  139. package/src/api/SubComponent/SubInherit/SubInheritOption.ts +8 -0
  140. package/src/api/SubComponent/SubInherit/test/error.test.ts +9 -7
  141. package/src/api/SubComponent/SubInherit/test/normal.test.ts +5 -4
  142. package/src/api/SubComponent/SubMethods/SubMethodsOption.ts +7 -3
  143. package/src/api/SubComponent/SubMethods/test/error.test.ts +13 -5
  144. package/src/api/SubComponent/SubMethods/test/normarl.test.ts +6 -12
  145. package/src/api/SubComponent/SubPageLifetimes/SubPageLifetimesOption.ts +2 -2
  146. package/src/api/SubComponent/SubPageLifetimes/test/error.test.ts +1 -32
  147. package/src/api/SubComponent/SubPageLifetimes/test/normal.test.ts +1 -74
  148. package/src/api/SubComponent/SubStore/SubDataConstraint.ts +2 -2
  149. package/src/api/SubComponent/SubStore/SubStoreOption.ts +15 -1
  150. package/src/api/SubComponent/SubStore/test/error.test.ts +4 -0
  151. package/src/api/SubComponent/SubStore/test/normal.test.ts +2 -0
  152. package/src/api/SubComponent/SubWatch/SubWatchOption.ts +2 -1
  153. package/src/api/SubComponent/SubWatch/test/WatchComputed.test.ts +75 -43
  154. package/src/api/SubComponent/SubWatch/test/error.test.ts +12 -3
  155. package/src/api/SubComponent/index.ts +28 -17
  156. package/src/behaviors/BComputedAndWatch/index.ts +2 -2
  157. package/src/behaviors/BComputedAndWatch/types.ts +1 -0
  158. package/src/behaviors/BStore.ts +4 -6
  159. package/src/behaviors/BbeforeCreated.ts +2 -2
  160. package/src/index.ts +12 -8
  161. package/src/types/OfficialTypeAlias.ts +7 -11
  162. package/src/types/RemoveInnerData.ts +5 -0
  163. package/src/utils/InnerMarker.ts +1 -1
  164. package/src/utils/deepClone.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"BbeforeCreated.js","sourceRoot":"","sources":["../../src/behaviors/BbeforeCreated.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;IACpC,gBAAgB,CAAC,OAAiC;QAEhD,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAU,CAAC,YAAY,CAAC;QAEzD,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"BbeforeCreated.js","sourceRoot":"","sources":["../../src/behaviors/BbeforeCreated.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;IACpC,gBAAgB,CAAC,OAAgC;QAE/C,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAU,CAAC,YAAY,CAAC;QAEzD,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;CACF,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- import { navigateTo } from "./api/navigateTo";
2
1
  import { DefineComponent } from "./api/DefineComponent";
2
+ import { navigateTo } from "./api/navigateTo";
3
3
  import { RootComponent } from "./api/RootComponent";
4
4
  import { SubComponent } from "./api/SubComponent";
5
- import type { DetailedType } from "./types/DetailedType";
6
5
  import type { ComponentDocExtension } from "./types/ComponentDocExtension";
6
+ import type { DetailedType } from "./types/DetailedType";
7
7
  import type { GenerateDoc } from "./types/GenerateDoc";
8
8
  import type { ParamsEqual } from "./types/TwoParamsEqual";
9
9
  export type { Vant, Wm } from "./thirdLib";
10
- export type { Dataset, Detail, WMBaseEvent, WMCustomEvent } from "./types/OfficialTypeAlias";
10
+ export type { CurrentTargetDataset, Dataset, Detail, Mark, TargetDataset, WMBaseEvent, WMCustomEvent, } from "./types/OfficialTypeAlias";
11
11
  export { type ComponentDocExtension, DefineComponent, type DetailedType, type GenerateDoc, navigateTo, type ParamsEqual, RootComponent, SubComponent, };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { navigateTo } from "./api/navigateTo";
2
1
  import { DefineComponent } from "./api/DefineComponent";
2
+ import { navigateTo } from "./api/navigateTo";
3
3
  import { RootComponent } from "./api/RootComponent";
4
4
  import { SubComponent } from "./api/SubComponent";
5
5
  export { DefineComponent, navigateTo, RootComponent, SubComponent, };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAWlD,OAAO,EAEL,eAAe,EAGf,UAAU,EAEV,aAAa,EACb,YAAY,GACb,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiBlD,OAAO,EAEL,eAAe,EAIf,UAAU,EAEV,aAAa,EACb,YAAY,GACb,CAAC"}
@@ -6,7 +6,7 @@ export type WMTriggerEventOption = WechatMiniprogram.Component.TriggerEventOptio
6
6
  export type WMCustomEvent<Detail = undefined, Mark extends object = object, CurrentTargetDataset extends object = object, TargetDataset extends object = CurrentTargetDataset> = WechatMiniprogram.CustomEvent<Detail, Mark, CurrentTargetDataset, TargetDataset>;
7
7
  export type WMBaseEvent<Mark extends object = object, CurrentTargetDataset extends object = object, TargetDataset extends object = CurrentTargetDataset> = WechatMiniprogram.BaseEvent<Mark, CurrentTargetDataset, TargetDataset>;
8
8
  export type Dataset<TCurrentTargetDataset extends object, TargetDataset extends object = TCurrentTargetDataset, Detail = undefined> = WMCustomEvent<Detail, object, TCurrentTargetDataset, TargetDataset>;
9
- export type Mark<TMark extends object> = WechatMiniprogram.CustomEvent<{}, TMark, {}, {}>;
9
+ export type Mark<TMark extends object> = Required<WechatMiniprogram.CustomEvent<object, TMark, object, object>>;
10
10
  export type Detail<T> = WMCustomEvent<T>;
11
11
  export type CurrentTargetDataset<T extends object> = WMCustomEvent<{}, {}, T>;
12
12
  export type TargetDataset<TargetDataset extends object> = WMCustomEvent<{}, {}, {}, TargetDataset>;
@@ -0,0 +1 @@
1
+ export type RemoveInnerData<S extends string> = S extends unknown ? S extends `_${string}` ? never : S : never;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RemoveInnerData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoveInnerData.js","sourceRoot":"","sources":["../../src/types/RemoveInnerData.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
1
  export const INNERMARKER = {
2
- url: "__missannil__",
2
+ url: "__annil__",
3
3
  };
4
4
  //# sourceMappingURL=InnerMarker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InnerMarker.js","sourceRoot":"","sources":["../../src/utils/InnerMarker.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,EAAE,eAAsC;CAE5C,CAAC"}
1
+ {"version":3,"file":"InnerMarker.js","sourceRoot":"","sources":["../../src/utils/InnerMarker.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,GAAG,EAAE,WAAkC;CAExC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../../src/utils/deepClone.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,SAAS,CAAI,KAAQ;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAM,CAAC;IAEpD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"deepClone.js","sourceRoot":"","sources":["../../src/utils/deepClone.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,SAAS,CAAI,KAAQ;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAM,CAAC;IAEpD,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YACrD,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "annil",
3
- "version": "1.1.1",
3
+ "version": "1.2.0-beta.0",
4
4
  "description": "微信小程序(原生开发)插件",
5
5
  "main": "dist/index.js",
6
6
  "types": "src/index.ts",
@@ -10,12 +10,14 @@
10
10
  },
11
11
  "homepage": "https://github.com/missannil/annil.git",
12
12
  "scripts": {
13
- "test": "jest --watch",
14
13
  "coverage": "jest --coverage",
15
14
  "prepare": "husky install",
16
15
  "lint": "eslint . --fix && npm run fmt",
17
16
  "fmt": "dprint fmt",
17
+ "test:jest": "jest --watch",
18
18
  "test:type": "tsc --watch",
19
+ "type": "npm run test:type",
20
+ "jest": "npm run test:jest",
19
21
  "build": "tsc -p tsconfig.build.json"
20
22
  },
21
23
  "devDependencies": {
@@ -4,7 +4,6 @@ import { BComputedAndWatch } from "../../behaviors/BComputedAndWatch";
4
4
  import { initComputed } from "../../behaviors/BComputedAndWatch/initComputed";
5
5
  import type { Instance } from "../../behaviors/BComputedAndWatch/types";
6
6
  import { BStore } from "../../behaviors/BStore";
7
- import { deepClone } from "../../utils/deepClone";
8
7
  import { INNERMARKER } from "../../utils/InnerMarker";
9
8
  import { isEmptyObject } from "../../utils/isEmptyObject";
10
9
  import type { RootComponentTrueOptions } from "../RootComponent";
@@ -16,72 +15,134 @@ import type {
16
15
  import type { EventsConstraint } from "../RootComponent/Events/EventsConstraint";
17
16
  import type { PageInstance } from "../RootComponent/Instance/RootComponentInstance";
18
17
  import type { SubComponentTrueOptions } from "../SubComponent";
19
- import type { FinalOptionsForComponent, FuncOptions } from ".";
18
+ import type { FinalOptionsOfComponent, FuncOptions } from ".";
20
19
  /**
21
- * 针对通过 navigateTo传过来的数据解析
20
+ * 针对通过 navigateTo传过来的数据对页面onLoad周期传入数据解析
22
21
  * @param option - option中的url是拼接了encodeURIComponent转码的data对象的,key为INNERMARKER.url
23
22
  */
24
- /* istanbul ignore next */
23
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
25
24
  function onLoadReceivedDataHandle(
26
25
  this: PageInstance,
27
26
  option: Record<typeof INNERMARKER.url, string>,
28
27
  ) {
29
28
  const innerData: string | undefined = option[INNERMARKER.url];
30
- // 未使用自定义的navigateTo
29
+ // 未使用navigateTo API
31
30
  if (innerData === undefined) return;
32
- const optionData = JSON.parse(decodeURIComponent(innerData));
31
+ const decodeOption = JSON.parse(decodeURIComponent(innerData));
33
32
 
34
33
  // 使用navigateTo
35
- for (const key in optionData) {
36
- option[key] = optionData[key];
34
+ for (const key in decodeOption) {
35
+ option[key] = decodeOption[key];
37
36
  }
38
-
39
- // setData会触发计算属性 继承属性等 。
40
- this.setData(option as any);
41
-
42
37
  delete option[INNERMARKER.url];
43
38
 
44
- Reflect.deleteProperty(this.data, INNERMARKER.url);
39
+ // 默认生命周期不会把接收的数据setData,为了更方便setData.注: 此时计算属性还未初始化。
40
+ // this.setData(option);
45
41
  }
46
-
47
42
  /**
48
- * onLoad生命周期劫持函数
43
+ * 针对通过 navigateTo传过来的数据对组件load周期传入数据解析
44
+ * @param option - option中的url是拼接了encodeURIComponent转码的data对象的,key为INNERMARKER.url
49
45
  */
50
- /* istanbul ignore next */
51
- function onLoadHijack(
52
- options: FinalOptionsForComponent,
53
- before: Func[],
54
- after: Func[] = [],
55
- ) {
56
- options.methods ||= {};
57
-
58
- const cloneOpt = deepClone(options);
59
- const originalOnLoad: Func | undefined = options.methods.onLoad;
46
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
47
+ // function loadReceivedDataHandle(
48
+ // this: PageInstance,
49
+ // option: Record<typeof INNERMARKER.url, string>,
50
+ // ) {
51
+ // const innerData: string | undefined = option[INNERMARKER.url];
52
+ // // 未使用自定义的navigateTo
53
+ // if (innerData === undefined) return;
54
+ // const decodeOption = JSON.parse(decodeURIComponent(innerData));
55
+
56
+ // // 使用navigateTo
57
+ // for (const key in decodeOption) {
58
+ // option[key] = decodeOption[key];
59
+ // }
60
+ // delete option[INNERMARKER.url];
61
+ // }
62
+ /**
63
+ * 劫持指定配置字段
64
+ */
65
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
66
+ function hijack(config: object, field: string, before: Func[] = [], after: Func[] = []) {
67
+ const originalFunc: Func | undefined = config[field];
60
68
 
61
- options.methods.onLoad = function(props: unknown) {
62
- before.forEach((func) => {
63
- func.call(this, props, cloneOpt);
64
- });
69
+ config[field] = function(...args: any[]) {
70
+ before.forEach(func => func.call(this, ...args));
65
71
 
66
- originalOnLoad?.call(this, props);
72
+ originalFunc && originalFunc.apply(this, args);
67
73
 
68
- after.forEach((func) => {
69
- func.call(this, props, cloneOpt);
70
- });
74
+ after.forEach(func => func.call(this, ...args));
71
75
  };
76
+
77
+ return;
72
78
  }
79
+
80
+ /**
81
+ * onLoad生命周期劫持函数
82
+ */
83
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
84
+ // function onLoadHijack(
85
+ // options: FinalOptionsOfComponent,
86
+ // before: Func[],
87
+ // after: Func[] = [],
88
+ // ) {
89
+ // options.methods ||= {};
90
+
91
+ // const cloneOpt = deepClone(options);
92
+ // const originalOnLoad: Func | undefined = options.methods.onLoad;
93
+
94
+ // options.methods.onLoad = function(props: unknown) {
95
+ // before.forEach((func) => {
96
+ // func.call(this, props, cloneOpt);
97
+ // });
98
+
99
+ // originalOnLoad?.call(this, props);
100
+
101
+ // after.forEach((func) => {
102
+ // func.call(this, props, cloneOpt);
103
+ // });
104
+ // };
105
+ // }
106
+ /**
107
+ * 劫持pageLifetimes中的load字段
108
+ */
109
+ /* istanbul ignore next */
110
+ // function loadHijack(
111
+ // options: FinalOptionsOfComponent,
112
+ // before: Func[],
113
+ // after: Func[] = [],
114
+ // ) {
115
+ // /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
116
+ // options.lifetimes ||= {};
117
+
118
+ // const originalAttached: Func | undefined = options.lifetimes.attached;
119
+
120
+ // options.lifetimes.attached = function() {
121
+ // before.forEach((func) => {
122
+ // func.call(this, options);
123
+ // });
124
+
125
+ // originalAttached?.call(this);
126
+
127
+ // /* istanbul ignore next */
128
+ // after.forEach((func) => {
129
+ // func.call(this, options);
130
+ // });
131
+ // };
132
+ // }
73
133
  /**
74
134
  * 内部保护字段 即不允许配置的字段名(所有方法下)
75
135
  */
76
- const INNERFIELDS = ["disposer"];
136
+ // const INNERFIELDS = ["disposer"];
77
137
 
78
138
  /**
79
- * 报错的形式避免输入字段和内部字段冲突
139
+ * 报错的形式避免输入字段和内部字段冲突,保证config下不包含内部预定字段(列表)
80
140
  */
81
- /* istanbul ignore next */
82
- function InternalFieldProtection(methodsConfig: object) {
83
- const methodsConfigKeys = Object.keys(methodsConfig);
84
- for (const key of INNERFIELDS) {
141
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
142
+ function InternalFieldProtection(config: object | undefined, keys: string[]) {
143
+ if (!config) return;
144
+ const methodsConfigKeys = Object.keys(config);
145
+ for (const key of keys) {
85
146
  if (methodsConfigKeys.includes(key)) {
86
147
  throw Error(`${key}已被内部字段占用`);
87
148
  }
@@ -97,14 +158,16 @@ function _funcConfigHandle(methodsConfig: object, configList: Record<string, Fun
97
158
  };
98
159
  }
99
160
  }
100
-
161
+ /**
162
+ * 把函数列表配置放入一个配置中循环一次运行
163
+ */
101
164
  function funcConfigHandle(
102
- finalOptionsForComponent: FinalOptionsForComponent,
165
+ finalOptionsForComponent: FinalOptionsOfComponent,
103
166
  isPage: boolean | undefined,
104
167
  funcOptions: FuncOptions,
105
168
  ) {
106
169
  // 测试框架无法测试page情形
107
- /* istanbul ignore next */
170
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
108
171
  if (isPage) {
109
172
  // 页面时 生命周期方法(即 on 开头的方法),(https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/component.html)
110
173
  funcOptions.pageLifetimes && _funcConfigHandle(finalOptionsForComponent.methods ||= {}, funcOptions.pageLifetimes);
@@ -136,16 +199,18 @@ function funcFieldsCollect(
136
199
  }
137
200
  }
138
201
 
139
- // 其他字段加入到componentOptions对应字段配置中
202
+ /**
203
+ * 其他字段加入到componentOptions对应字段配置中
204
+ */
140
205
  function otherFieldsHandle(
141
- finalOptions: FinalOptionsForComponent,
206
+ finalOptions: FinalOptionsOfComponent,
142
207
  rootComponentOptions: RootComponentTrueOptions,
143
208
  ) {
144
209
  for (const key in rootComponentOptions) {
145
210
  const config = rootComponentOptions[key];
146
211
  if (Array.isArray(config)) {
147
212
  // 好像只有behaviors是数组吧.
148
- /* istanbul ignore next */
213
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
149
214
  (finalOptions[key] ||= []).push(...config);
150
215
  } else {
151
216
  Object.assign(finalOptions[key] ||= {}, config);
@@ -153,16 +218,16 @@ function otherFieldsHandle(
153
218
  }
154
219
  }
155
220
  /**
156
- * 把events字段配置变成函数放入到componentOptions.methods中
221
+ * 把events字段放入到componentOptions.methods中
157
222
  */
158
- function eventsHandle(componentOptions: FinalOptionsForComponent, eventsConfig: EventsConstraint) {
159
- /* istanbul ignore next */
223
+ function eventsHandle(componentOptions: FinalOptionsOfComponent, eventsConfig: EventsConstraint) {
224
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
160
225
  componentOptions.methods ||= {};
161
226
 
162
227
  Object.assign(componentOptions.methods, eventsConfig);
163
228
  }
164
229
  function subComponentsHandle(
165
- componentOptions: FinalOptionsForComponent,
230
+ componentOptions: FinalOptionsOfComponent,
166
231
  subComponents: SubComponentTrueOptions[],
167
232
  funcOptions: FuncOptions,
168
233
  ) {
@@ -186,10 +251,10 @@ function IsFullCustomEvents(
186
251
  * 把customEvents字段配置变成函数放入到componentOptions.methods中
187
252
  */
188
253
  function customEventsHandle(
189
- componentOptions: FinalOptionsForComponent,
254
+ componentOptions: FinalOptionsOfComponent,
190
255
  customEventsConfig: CustomEventConstraint,
191
256
  ) {
192
- /* istanbul ignore next */
257
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
193
258
  componentOptions.methods ||= {};
194
259
 
195
260
  for (const key in customEventsConfig) {
@@ -206,7 +271,49 @@ function customEventsHandle(
206
271
  }
207
272
  }
208
273
  }
274
+ /**
275
+ * 触发各个组件的页面load事件
276
+ */
277
+ /* istanbul ignore next */
278
+ // function triggerCompLoad(this: Instance, props: object) {
279
+ // if (!this.__compLoadList__) return;
280
+ // this.__compLoadList__.forEach((loadFunc) => {
281
+ // loadFunc(props);
282
+ // });
283
+ // }
284
+ /* istanbul ignore next */
285
+ // function getPageInstance(pageId: string): Instance {
286
+ // const pagestack = getCurrentPages() as unknown as Instance[];
287
+ // let pageInstance: Instance;
288
+ // pagestack.some((instance) => {
289
+ // if (instance.getPageId() === pageId) {
290
+ // pageInstance = instance;
291
+
292
+ // return true;
293
+ // }
294
+
295
+ // return false;
296
+ // });
297
+
298
+ // // @ts-ignore pagestack中一定赋值了
299
+ // return pageInstance;
300
+ // }
301
+ /**
302
+ * 收集组件pageLifetimes下的load周期函数到页面实例的__loadFunList__
303
+ */
304
+ /* istanbul ignore next */
305
+ // function collectLoadLifetimesOfComponent(this: Instance, finalOptionsForComponent: FinalOptionsOfComponent) {
306
+ // const loadFunc = finalOptionsForComponent.pageLifetimes?.load;
307
+
308
+ // console.log(loadFunc, finalOptionsForComponent);
309
+
310
+ // if (!loadFunc) return;
311
+
312
+ // const pageInstance = getPageInstance(this.getPageId());
313
+ // const __compLoadList__: Function[] = (pageInstance.__compLoadList__ ||= []);
209
314
 
315
+ // __compLoadList__.push(loadFunc.bind(this));
316
+ // }
210
317
  /**
211
318
  * 收集 rootComponentOptions 配置到 finalOptions 和 funcOptions 中
212
319
  * @param finalOptions - 收集配置对象
@@ -214,7 +321,7 @@ function customEventsHandle(
214
321
  * @param rootComponentOptions - 被收集的源配置对象
215
322
  */
216
323
  function collectRootComponentOption(
217
- finalOptions: FinalOptionsForComponent,
324
+ finalOptions: FinalOptionsOfComponent,
218
325
  funcOptions: FuncOptions,
219
326
  rootComponentOptions: RootComponentTrueOptions,
220
327
  ) {
@@ -239,11 +346,11 @@ function collectRootComponentOption(
239
346
  export function collectOptionsForComponent(
240
347
  rootComponentOption: RootComponentTrueOptions | undefined,
241
348
  subComponentsList: SubComponentTrueOptions[] | undefined,
242
- ): FinalOptionsForComponent {
243
- const finalOptionsForComponent: FinalOptionsForComponent = {
349
+ ): FinalOptionsOfComponent {
350
+ const finalOptionsForComponent: FinalOptionsOfComponent = {
244
351
  // default options
245
352
  options: {
246
- // addGlobalClass: true,
353
+ addGlobalClass: true, // "styleIsolation": "apply-shared"
247
354
  multipleSlots: true,
248
355
  pureDataPattern: /^_/,
249
356
  virtualHost: true,
@@ -267,24 +374,27 @@ export function collectOptionsForComponent(
267
374
  if (subComponentsList && !isEmptyObject(subComponentsList)) {
268
375
  subComponentsHandle(finalOptionsForComponent, subComponentsList, funcOptions);
269
376
  }
270
- // 框架无法测试页面
271
- /* istanbul ignore next */
272
- if (!isEmptyObject(funcOptions)) {
273
- funcConfigHandle(finalOptionsForComponent, rootComponentOption?.isPage, funcOptions);
274
- }
377
+ // miniprogram-simulate(当前版本 1.6.1) 无法测试页面
378
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
379
+ funcConfigHandle(finalOptionsForComponent, rootComponentOption?.isPage, funcOptions);
275
380
 
276
- finalOptionsForComponent.methods && InternalFieldProtection(finalOptionsForComponent.methods);
381
+ finalOptionsForComponent.methods && InternalFieldProtection(finalOptionsForComponent.methods, ["disposer"]);
277
382
 
278
- // BBeforeCreate在最后面
279
- finalOptionsForComponent.behaviors!.push(BBeforeCreate);
383
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
384
+ finalOptionsForComponent.methods?.onLoad
385
+ && hijack(finalOptionsForComponent.methods, "onLoad", [onLoadReceivedDataHandle, initComputed], []);
280
386
 
281
- onLoadHijack(finalOptionsForComponent, [onLoadReceivedDataHandle, initComputed], []);
387
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
388
+ finalOptionsForComponent.pageLifetimes?.load
389
+ && hijack(finalOptionsForComponent.pageLifetimes, "load", [onLoadReceivedDataHandle], []);
282
390
 
283
- // 框架无法测试页面
284
- /* istanbul ignore next */
391
+ /* istanbul ignore next: miniprogram-simulate(当前版本 1.6.1) 无法测试页面 */
285
392
  if (finalOptionsForComponent.isPage) {
393
+ // 页面时删除预设的虚拟组件字段
286
394
  Reflect.deleteProperty(finalOptionsForComponent.options!, "virtualHost");
287
395
  }
396
+ // BBeforeCreate在最后面,让BeforeCreate生命周期运行在最终建立组件时。
397
+ finalOptionsForComponent.behaviors!.push(BBeforeCreate);
288
398
 
289
399
  return finalOptionsForComponent;
290
400
  }
@@ -1,6 +1,6 @@
1
1
  import type { IfExtends } from "hry-types/src/Any/IfExtends";
2
2
  import type { Func } from "hry-types/src/Misc/Func";
3
- import type { WMComponent, WMCompPageLifetimes, WMPageLifetimes } from "../../types/OfficialTypeAlias";
3
+ import type { WMComponent } from "../../types/OfficialTypeAlias";
4
4
 
5
5
  import type { LifetimesConstraint } from "../RootComponent/Lifetimes/LifetimesConstraint";
6
6
  import type { RootComponentDoc } from "../RootComponent/RootComponentDoc";
@@ -12,6 +12,11 @@ import type { RootComponentOption } from "./RootComponent/RootComponentOption";
12
12
  import type { SubComponentsOption } from "./SubComponents/SubComponentsOption";
13
13
 
14
14
  import type { RootComponentTrueOptions } from "../RootComponent";
15
+ import type { ComputedConstraint } from "../RootComponent/Computed/ComputedConstraint";
16
+ import type { DataConstraint } from "../RootComponent/Data/DataConstraint";
17
+ import type { MethodsConstraint } from "../RootComponent/Methods/MethodsConstraint";
18
+ import type { PageLifetimesOption } from "../RootComponent/PageLifetimes/PageLifetimesOption";
19
+ import type { StoreConstraint } from "../RootComponent/Store/StoreConstraint";
15
20
  import { collectOptionsForComponent } from "./collectOptionsForComponent";
16
21
 
17
22
  type Path = `/${string}`;
@@ -54,23 +59,22 @@ export type FuncOptions = Record<"pageLifetimes" | "lifetimes" | "watch", Record
54
59
  /**
55
60
  * 最终传入原生Component的配置项
56
61
  */
57
- export type FinalOptionsForComponent = {
62
+ export type FinalOptionsOfComponent = {
58
63
  isPage?: boolean;
59
64
  options?: WMComponent.Options;
60
65
  properties?: Record<string, any>;
61
- data?: object;
62
- store?: object;
63
- computed?: Record<string, Func>;
66
+ data?: DataConstraint;
67
+ store?: StoreConstraint;
68
+ computed?: ComputedConstraint;
64
69
  observers?: Record<string, Func>;
65
70
  behaviors?: string[];
66
- methods?: Record<string, Func> & { __storeConfig__?: Func };
71
+ methods?: MethodsConstraint;
67
72
  watch?: Record<string, Func>;
68
73
  lifetimes?: LifetimesConstraint;
69
- pageLifetimes?: Partial<WMCompPageLifetimes & { load: Func } & WMPageLifetimes>;
70
- };
74
+ } & PageLifetimesOption<false, object>;
71
75
 
72
76
  export const DefineComponent: DefineComponentConstructor = function(options): any {
73
77
  Component(
74
- collectOptionsForComponent(options.rootComponent as RootComponentTrueOptions | undefined, options.subComponents),
78
+ collectOptionsForComponent(options.rootComponent as RootComponentTrueOptions, options.subComponents),
75
79
  );
76
80
  };
@@ -2,11 +2,31 @@ import type { DuplicateFieldValidator } from "hry-types/src/Generic/DuplicateFie
2
2
 
3
3
  import type { ComputedConstraint } from "./ComputedConstraint";
4
4
 
5
- export type ComputedOption<TComputed extends ComputedConstraint, OtherData extends object> = {
5
+ export type ComputedOption<TComputed extends ComputedConstraint, CompareKeys extends PropertyKey> = {
6
6
  /**
7
- * 计算属性字段,可通过this.data获取其他数据
7
+ * computed字段, [类型约束ComputedConstraint](ComputedConstraint.ts)
8
+ * @remarks
9
+ *
10
+ * 函数体内,可通过this.data获取实例其他数据(依赖),setData发生时,若数据(依赖)发生变化则重新运行函数体并setData。
11
+ *
12
+ * 带重复字段检测(与properties、data、store字段比较)
13
+ *
14
+ * @example
15
+ *
16
+ * ```ts
17
+ * {
18
+ * data:{
19
+ * count:1
20
+ * },
21
+ * computed:{
22
+ * return this.data.count + 1
23
+ * }
24
+
25
+ * }
26
+ *
27
+ * ```
8
28
  */
9
29
  computed?:
10
30
  & TComputed
11
- & DuplicateFieldValidator<TComputed, keyof OtherData>;
31
+ & DuplicateFieldValidator<TComputed, CompareKeys>;
12
32
  };
@@ -5,6 +5,4 @@ import type { ComputedConstraint } from "./ComputedConstraint";
5
5
  * @param T - ComputedConstraint
6
6
  * @returns object
7
7
  */
8
- export type GetComputedDoc<TComputed extends ComputedConstraint> = TComputed extends unknown
9
- ? { [k in keyof TComputed]: ReturnType<TComputed[k]> }
10
- : never;
8
+ export type GetComputedDoc<TComputed extends ComputedConstraint> = { [k in keyof TComputed]: ReturnType<TComputed[k]> };
@@ -1,12 +1,8 @@
1
1
  import { Checking, type Test } from "hry-types";
2
2
  import type { ReadonlyDeep } from "hry-types/src/Any/_api";
3
- import type { DetailedType } from "../../../../types/DetailedType";
4
3
  import { RootComponent } from "../..";
5
4
  import type { Mock_User } from "../../Properties/test/normalRequired.test";
6
5
 
7
- /**
8
- * computed字段约束为 [ComputedConstraint](../ComputedConstraint.ts)
9
- */
10
6
  const RootDoc = RootComponent()({
11
7
  properties: {
12
8
  firstName: String,
@@ -14,10 +10,13 @@ const RootDoc = RootComponent()({
14
10
  data: {
15
11
  lastName: "lastName",
16
12
  },
13
+ store: {
14
+ prefix: () => "hry-", // 模拟而已
15
+ },
17
16
  computed: {
18
17
  fullName() {
19
- // 1 计算属性字段可以通过this.data 引用properties、data
20
- return this.data.firstName + this.data.lastName;
18
+ // 1 计算属性字段可以通过this.data 引用properties、data、store字段
19
+ return this.data.prefix + this.data.firstName + this.data.lastName;
21
20
  },
22
21
  user() {
23
22
  return {} as Mock_User;
@@ -35,12 +34,16 @@ const RootDoc = RootComponent()({
35
34
  lastName: string;
36
35
  fullName: string;
37
36
  user: Mock_User;
37
+ prefix: string;
38
38
  id_fullName: string;
39
39
  readOnly: "str";
40
40
  }>,
41
41
  Test.Pass
42
42
  >;
43
43
 
44
+ // @ts-expect-error 深度只读 不可赋值
45
+ this.data.user.id = "xxx";
46
+
44
47
  return "str";
45
48
  },
46
49
  },
@@ -84,16 +87,3 @@ const EmptyComputedFieldDoc = RootComponent()({
84
87
  });
85
88
 
86
89
  Checking<typeof EmptyComputedFieldDoc, { methods: { M1: () => void } }, Test.Pass>;
87
-
88
- RootComponent()({
89
- isPage: true,
90
- properties: {
91
- obj: Object as DetailedType<{ name: string; age: number }>,
92
- },
93
- computed: {
94
- age() {
95
- // 页面实例对象不添加Null,因为计算属性初始化在onLoad之后(即properties已传入时,且不会传入Null)
96
- return this.data.obj.age;
97
- },
98
- },
99
- });