Vue3 源码请教

发布于 2022-09-12 04:28:18 字数 2252 浏览 27 评论 0

最近从 Vue3 源码中学习,不怎么自己用 TypeScript 写就有问题特来请教

package 其中的 runtime-dompatchProp.ts 文件中引入了 @vue/runtime-core 定义的泛型 RenderOptions 在文件 render.ts 中, 并做了一个类型别名。

patchProp.ts:

import { RendererOptions } from '@vue/runtime-core'

const nativeOnRE = /^on[a-z]/

type DOMRendererOptions = RendererOptions<Node, Element>

render.ts

export interface RendererOptions<
  HostNode = RendererNode,
  HostElement = RendererElement
> {
  patchProp(
    el: HostElement,
    key: string,
    prevValue: any,
    nextValue: any,
    isSVG?: boolean,
    prevChildren?: VNode<HostNode, HostElement>[],
    parentComponent?: ComponentInternalInstance | null,
    parentSuspense?: SuspenseBoundary | null,
    unmountChildren?: UnmountChildrenFn
  ): void
  forcePatchProp?(el: HostElement, key: string): boolean
  insert(el: HostNode, parent: HostElement, anchor?: HostNode | null): void
  remove(el: HostNode): void
  createElement(
    type: string,
    isSVG?: boolean,
    isCustomizedBuiltIn?: string
  ): HostElement
  createText(text: string): HostNode
  createComment(text: string): HostNode
  setText(node: HostNode, text: string): void
  setElementText(node: HostElement, text: string): void
  parentNode(node: HostNode): HostElement | null
  nextSibling(node: HostNode): HostNode | null
  querySelector?(selector: string): HostElement | null
  setScopeId?(el: HostElement, id: string): void
  cloneNode?(node: HostNode): HostNode
  insertStaticContent?(
    content: string,
    parent: HostElement,
    anchor: HostNode | null,
    isSVG: boolean
  ): HostElement[]
}

export interface RendererNode {
  [key: string]: any
}

export interface RendererElement extends RendererNode {}

我就写了一个简易的 demo 怎么就报错呢?

interface B<HostNode=RenderNode,HostElement=RenderElement>{
    patchProp(el:HostNode):void
    forcePatchProp(el:HostElement):boolean
}

interface RenderNode{
    [key:string]:any
}

interface RenderElement extends RenderNode

type Ac = B<Node,Element>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

落在眉间の轻吻 2022-09-19 04:28:18

你忘了 interface 的大括号。

interface RenderElement extends RenderNode {}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文