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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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. export type IntersectionMixin<T> = IsDefaultMixinComponent<T> extends true
  74. ? OptionTypesType<{}, {}, {}, {}, {}, {}>
  75. : UnionToIntersection<ExtractMixin<T>>
  76. export 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,
  169. Options & MergedComponentOptionsOverride,
  170. EmitFn<E>
  171. > {}
  172. type MergedHook<T = () => void> = T | T[]
  173. export type MergedComponentOptionsOverride = {
  174. beforeCreate?: MergedHook
  175. created?: MergedHook
  176. beforeMount?: MergedHook
  177. mounted?: MergedHook
  178. beforeUpdate?: MergedHook
  179. updated?: MergedHook
  180. activated?: MergedHook
  181. deactivated?: MergedHook
  182. /** @deprecated use `beforeUnmount` instead */
  183. beforeDestroy?: MergedHook
  184. beforeUnmount?: MergedHook
  185. /** @deprecated use `unmounted` instead */
  186. destroyed?: MergedHook
  187. unmounted?: MergedHook
  188. renderTracked?: MergedHook<DebuggerHook>
  189. renderTriggered?: MergedHook<DebuggerHook>
  190. errorCaptured?: MergedHook<ErrorCapturedHook>
  191. }
  192. export type DebuggerHook = (e: DebuggerEvent) => void
  193. export type ErrorCapturedHook<TError = unknown> = (
  194. err: TError,
  195. instance: ComponentPublicInstance | null,
  196. info: string
  197. ) => boolean | void
  198. export type ComponentPublicInstanceConstructor<
  199. T extends ComponentPublicInstance<
  200. Props,
  201. RawBindings,
  202. D,
  203. C,
  204. M
  205. > = ComponentPublicInstance<any, any, any>,
  206. Props = any,
  207. RawBindings = any,
  208. D = any,
  209. C extends ComputedOptions = ComputedOptions,
  210. M extends MethodOptions = MethodOptions
  211. > = {
  212. new (...args: any[]): T
  213. }