v3-component-options.d.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import { Vue } from './vue'
  2. import { VNode } from './vnode'
  3. import { ComponentOptions as Vue2ComponentOptions } from './options'
  4. import { EmitsOptions, SetupContext } from './v3-setup-context'
  5. import { Data } from './common'
  6. import { ComponentPropsOptions, ExtractPropTypes } from './v3-component-props'
  7. import { ComponentRenderProxy } from './v3-component-proxy'
  8. export { ComponentPropsOptions } from './v3-component-props'
  9. export type ComputedGetter<T> = (ctx?: any) => T
  10. export type ComputedSetter<T> = (v: T) => void
  11. export interface WritableComputedOptions<T> {
  12. get: ComputedGetter<T>
  13. set: ComputedSetter<T>
  14. }
  15. export type ComputedOptions = Record<
  16. string,
  17. ComputedGetter<any> | WritableComputedOptions<any>
  18. >
  19. export interface MethodOptions {
  20. [key: string]: Function
  21. }
  22. export type SetupFunction<
  23. Props,
  24. RawBindings = {},
  25. Emits extends EmitsOptions = {}
  26. > = (
  27. this: void,
  28. props: Readonly<Props>,
  29. ctx: SetupContext<Emits>
  30. ) => RawBindings | (() => VNode | null) | void
  31. interface ComponentOptionsBase<
  32. Props,
  33. D = Data,
  34. C extends ComputedOptions = {},
  35. M extends MethodOptions = {}
  36. > extends Omit<
  37. Vue2ComponentOptions<Vue, D, M, C, Props>,
  38. 'data' | 'computed' | 'method' | 'setup' | 'props'
  39. > {
  40. // allow any custom options
  41. [key: string]: any
  42. // rewrite options api types
  43. data?: (this: Props & Vue, vm: Props) => D
  44. computed?: C
  45. methods?: M
  46. }
  47. export type ExtractComputedReturns<T extends any> = {
  48. [key in keyof T]: T[key] extends { get: (...args: any[]) => infer TReturn }
  49. ? TReturn
  50. : T[key] extends (...args: any[]) => infer TReturn
  51. ? TReturn
  52. : never
  53. }
  54. export type ComponentOptionsWithProps<
  55. PropsOptions = ComponentPropsOptions,
  56. RawBindings = Data,
  57. D = Data,
  58. C extends ComputedOptions = {},
  59. M extends MethodOptions = {},
  60. Mixin = {},
  61. Extends = {},
  62. Emits extends EmitsOptions = {},
  63. EmitsNames extends string = string,
  64. Props = ExtractPropTypes<PropsOptions>
  65. > = ComponentOptionsBase<Props, D, C, M> & {
  66. props?: PropsOptions
  67. emits?: (Emits | EmitsNames[]) & ThisType<void>
  68. setup?: SetupFunction<Props, RawBindings, Emits>
  69. } & ThisType<
  70. ComponentRenderProxy<Props, RawBindings, D, C, M, Mixin, Extends, Emits>
  71. >
  72. export type ComponentOptionsWithArrayProps<
  73. PropNames extends string = string,
  74. RawBindings = Data,
  75. D = Data,
  76. C extends ComputedOptions = {},
  77. M extends MethodOptions = {},
  78. Mixin = {},
  79. Extends = {},
  80. Emits extends EmitsOptions = {},
  81. EmitsNames extends string = string,
  82. Props = Readonly<{ [key in PropNames]?: any }>
  83. > = ComponentOptionsBase<Props, D, C, M> & {
  84. props?: PropNames[]
  85. emits?: (Emits | EmitsNames[]) & ThisType<void>
  86. setup?: SetupFunction<Props, RawBindings, Emits>
  87. } & ThisType<
  88. ComponentRenderProxy<Props, RawBindings, D, C, M, Mixin, Extends, Emits>
  89. >
  90. export type ComponentOptionsWithoutProps<
  91. Props = {},
  92. RawBindings = Data,
  93. D = Data,
  94. C extends ComputedOptions = {},
  95. M extends MethodOptions = {},
  96. Mixin = {},
  97. Extends = {},
  98. Emits extends EmitsOptions = {},
  99. EmitsNames extends string = string
  100. > = ComponentOptionsBase<Props, D, C, M> & {
  101. props?: undefined
  102. emits?: (Emits | EmitsNames[]) & ThisType<void>
  103. setup?: SetupFunction<Props, RawBindings, Emits>
  104. } & ThisType<
  105. ComponentRenderProxy<Props, RawBindings, D, C, M, Mixin, Extends, Emits>
  106. >
  107. export type WithLegacyAPI<T, D, C, M, Props> = T &
  108. Omit<Vue2ComponentOptions<Vue, D, M, C, Props>, keyof T>