v3-component-public-instance.d.ts 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. import {
  2. DebuggerEvent,
  3. ShallowUnwrapRef,
  4. UnwrapNestedRefs
  5. } from './v3-generated'
  6. import { UnionToIntersection } from './common'
  7. import { Vue, VueConstructor } from './vue'
  8. import {
  9. ComputedOptions,
  10. MethodOptions,
  11. ExtractComputedReturns,
  12. ComponentOptionsMixin,
  13. ComponentOptionsBase
  14. } from './v3-component-options'
  15. import { EmitFn, EmitsOptions } from './v3-setup-context'
  16. /**
  17. * Custom properties added to component instances in any way and can be accessed through `this`
  18. *
  19. * @example
  20. * ```ts
  21. * import { Router } from 'vue-router'
  22. *
  23. * declare module 'vue' {
  24. * interface ComponentCustomProperties {
  25. * $router: Router
  26. * }
  27. * }
  28. * ```
  29. */
  30. export interface ComponentCustomProperties {}
  31. export type ComponentInstance = InstanceType<VueConstructor>
  32. export type OptionTypesKeys = 'P' | 'B' | 'D' | 'C' | 'M' | 'Defaults'
  33. export type OptionTypesType<
  34. P = {},
  35. B = {},
  36. D = {},
  37. C extends ComputedOptions = {},
  38. M extends MethodOptions = {},
  39. Defaults = {}
  40. > = {
  41. P: P
  42. B: B
  43. D: D
  44. C: C
  45. M: M
  46. Defaults: Defaults
  47. }
  48. type IsDefaultMixinComponent<T> = T extends ComponentOptionsMixin
  49. ? ComponentOptionsMixin extends T
  50. ? true
  51. : false
  52. : false
  53. type MixinToOptionTypes<T> = T extends ComponentOptionsBase<
  54. infer P,
  55. infer B,
  56. infer D,
  57. infer C,
  58. infer M,
  59. infer Mixin,
  60. infer Extends,
  61. any,
  62. any,
  63. infer Defaults
  64. >
  65. ? OptionTypesType<P & {}, B & {}, D & {}, C & {}, M & {}, Defaults & {}> &
  66. IntersectionMixin<Mixin> &
  67. IntersectionMixin<Extends>
  68. : never
  69. // ExtractMixin(map type) is used to resolve circularly references
  70. type ExtractMixin<T> = {
  71. Mixin: MixinToOptionTypes<T>
  72. }[T extends ComponentOptionsMixin ? 'Mixin' : never]
  73. type IntersectionMixin<T> = IsDefaultMixinComponent<T> extends true
  74. ? OptionTypesType<{}, {}, {}, {}, {}, {}>
  75. : UnionToIntersection<ExtractMixin<T>>
  76. type UnwrapMixinsType<
  77. T,
  78. Type extends OptionTypesKeys
  79. > = T extends OptionTypesType ? T[Type] : never
  80. type EnsureNonVoid<T> = T extends void ? {} : T
  81. export type CreateComponentPublicInstance<
  82. P = {},
  83. B = {},
  84. D = {},
  85. C extends ComputedOptions = {},
  86. M extends MethodOptions = {},
  87. Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
  88. Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
  89. E extends EmitsOptions = {},
  90. PublicProps = P,
  91. Defaults = {},
  92. MakeDefaultsOptional extends boolean = false,
  93. PublicMixin = IntersectionMixin<Mixin> & IntersectionMixin<Extends>,
  94. PublicP = UnwrapMixinsType<PublicMixin, 'P'> & EnsureNonVoid<P>,
  95. PublicB = UnwrapMixinsType<PublicMixin, 'B'> & EnsureNonVoid<B>,
  96. PublicD = UnwrapMixinsType<PublicMixin, 'D'> & EnsureNonVoid<D>,
  97. PublicC extends ComputedOptions = UnwrapMixinsType<PublicMixin, 'C'> &
  98. EnsureNonVoid<C>,
  99. PublicM extends MethodOptions = UnwrapMixinsType<PublicMixin, 'M'> &
  100. EnsureNonVoid<M>,
  101. PublicDefaults = UnwrapMixinsType<PublicMixin, 'Defaults'> &
  102. EnsureNonVoid<Defaults>
  103. > = ComponentPublicInstance<
  104. PublicP,
  105. PublicB,
  106. PublicD,
  107. PublicC,
  108. PublicM,
  109. E,
  110. PublicProps,
  111. PublicDefaults,
  112. MakeDefaultsOptional
  113. >
  114. // public properties exposed on the proxy, which is used as the render context
  115. // in templates (as `this` in the render option)
  116. export type ComponentPublicInstance<
  117. P = {}, // props type extracted from props option
  118. B = {}, // raw bindings returned from setup()
  119. D = {}, // return from data()
  120. C extends ComputedOptions = {},
  121. M extends MethodOptions = {},
  122. E extends EmitsOptions = {},
  123. PublicProps = P,
  124. Defaults = {},
  125. MakeDefaultsOptional extends boolean = false,
  126. Options = ComponentOptionsBase<
  127. any,
  128. any,
  129. any,
  130. any,
  131. any,
  132. any,
  133. any,
  134. any,
  135. any,
  136. any
  137. >
  138. > = Vue3Instance<
  139. D,
  140. P,
  141. PublicProps,
  142. E,
  143. Defaults,
  144. MakeDefaultsOptional,
  145. Options
  146. > &
  147. Readonly<P> &
  148. ShallowUnwrapRef<B> &
  149. UnwrapNestedRefs<D> &
  150. ExtractComputedReturns<C> &
  151. M &
  152. ComponentCustomProperties
  153. interface Vue3Instance<
  154. D,
  155. P,
  156. PublicProps,
  157. E,
  158. Defaults,
  159. MakeDefaultsOptional,
  160. Options
  161. > extends Vue<
  162. D,
  163. Readonly<
  164. MakeDefaultsOptional extends true
  165. ? Partial<Defaults> & Omit<P & PublicProps, keyof Defaults>
  166. : P & PublicProps
  167. >,
  168. ComponentPublicInstance | null,
  169. ComponentPublicInstance,
  170. ComponentPublicInstance[],
  171. Options & MergedComponentOptionsOverride,
  172. EmitFn<E>
  173. > {}
  174. type MergedHook<T = () => void> = T | T[]
  175. export type MergedComponentOptionsOverride = {
  176. beforeCreate?: MergedHook
  177. created?: MergedHook
  178. beforeMount?: MergedHook
  179. mounted?: MergedHook
  180. beforeUpdate?: MergedHook
  181. updated?: MergedHook
  182. activated?: MergedHook
  183. deactivated?: MergedHook
  184. /** @deprecated use `beforeUnmount` instead */
  185. beforeDestroy?: MergedHook
  186. beforeUnmount?: MergedHook
  187. /** @deprecated use `unmounted` instead */
  188. destroyed?: MergedHook
  189. unmounted?: MergedHook
  190. renderTracked?: MergedHook<DebuggerHook>
  191. renderTriggered?: MergedHook<DebuggerHook>
  192. errorCaptured?: MergedHook<ErrorCapturedHook>
  193. }
  194. export type DebuggerHook = (e: DebuggerEvent) => void
  195. export type ErrorCapturedHook<TError = unknown> = (
  196. err: TError,
  197. instance: ComponentPublicInstance | null,
  198. info: string
  199. ) => boolean | void
  200. export type ComponentPublicInstanceConstructor<
  201. T extends ComponentPublicInstance<
  202. Props,
  203. RawBindings,
  204. D,
  205. C,
  206. M
  207. > = ComponentPublicInstance<any, any, any>,
  208. Props = any,
  209. RawBindings = any,
  210. D = any,
  211. C extends ComputedOptions = ComputedOptions,
  212. M extends MethodOptions = MethodOptions
  213. > = {
  214. new (...args: any[]): T
  215. }