types: remove intersection of props interface on this

This commit is contained in:
Evan You 2019-03-01 14:06:19 -05:00
parent f00097127a
commit c335939dcf

View File

@ -72,7 +72,7 @@ export interface LifecycleMethods {
export interface ComponentClass extends ComponentClassOptions {
options?: ComponentOptions
new <P = {}, D = {}>(): Component<P, D> & D & P
new <P = {}, D = {}>(): Component<P, D>
}
export interface FunctionalComponent<P = {}> {
@ -84,9 +84,9 @@ export interface FunctionalComponent<P = {}> {
export type ComponentType = ComponentClass | FunctionalComponent
// Internal type that represents a mounted instance.
// It extends InternalComponent with mounted instance properties.
// It extends ComponentImplementation with mounted instance properties.
export interface ComponentInstance<P = {}, D = {}>
extends InternalComponent,
extends ComponentImplementation,
Partial<APIMethods<P, D>>,
Partial<LifecycleMethods> {
constructor: ComponentClass
@ -107,7 +107,7 @@ export interface ComponentInstance<P = {}, D = {}>
}
// actual implementation of the component
class InternalComponent implements PublicInstanceMethods {
class ComponentImplementation implements PublicInstanceMethods {
get $el(): any {
const el = this.$vnode && this.$vnode.el
return typeof el === 'function' ? (el as any)() : el
@ -125,6 +125,7 @@ class InternalComponent implements PublicInstanceMethods {
$options: ComponentOptions | null = null
$refs: Record<string, ComponentInstance | RenderNode> = {}
$proxy: any = null
$self: any
_rawData: Data | null = null
_computedGetters: Record<string, ComputedGetter> | null = null
@ -190,7 +191,7 @@ class InternalComponent implements PublicInstanceMethods {
// legacy event emitter interface exposed on component instances
if (__COMPAT__) {
const p = InternalComponent.prototype as any
const p = ComponentImplementation.prototype as any
;['on', 'off', 'once'].forEach(key => {
p['$' + key] = function(...args: any[]) {
this._eventEmitter[key](...args)
@ -206,5 +207,5 @@ if (__COMPAT__) {
}
// the exported Component has the implementation details of the actual
// InternalComponent class but with proper type inference of ComponentClass.
export const Component = InternalComponent as ComponentClass
// ComponentImplementation class but with proper type inference of ComponentClass.
export const Component = ComponentImplementation as ComponentClass