types: improve typing

This commit is contained in:
Evan You
2019-10-08 09:26:09 -04:00
parent 016231d09f
commit 1393ee52ca
8 changed files with 42 additions and 24 deletions

View File

@@ -1,18 +1,22 @@
import { VNode } from './vnode'
import { Data, ComponentInternalInstance } from './component'
import { isString } from '@vue/shared'
import { Data, ComponentInternalInstance, Component } from './component'
import { isString, isFunction } from '@vue/shared'
import { toRaw } from '@vue/reactivity'
type ComponentVNode = VNode & {
type: Component
}
let stack: VNode[] = []
type TraceEntry = {
vnode: VNode
vnode: ComponentVNode
recurseCount: number
}
type ComponentTraceStack = TraceEntry[]
export function pushWarningContext(vnode: VNode) {
export function pushWarningContext(vnode: ComponentVNode) {
stack.push(vnode)
}
@@ -117,9 +121,9 @@ const classifyRE = /(?:^|[-_])(\w)/g
const classify = (str: string): string =>
str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '')
function formatComponentName(vnode: VNode, file?: string): string {
const Component = vnode.type as any
let name = Component.displayName || Component.name
function formatComponentName(vnode: ComponentVNode, file?: string): string {
const Component = vnode.type
let name = isFunction(Component) ? Component.displayName : Component.name
if (!name && file) {
const match = file.match(/([^/\\]+)\.vue$/)
if (match) {
@@ -136,7 +140,7 @@ function formatProps(props: Data): string[] {
if (isString(value)) {
res.push(`${key}=${JSON.stringify(value)}`)
} else {
res.push(`${key}=`, toRaw(value) as any)
res.push(`${key}=`, String(toRaw(value)))
}
}
return res