fix(types/tsx): make JSX.Element extend VNode (#3171)
This commit is contained in:
parent
d09045282c
commit
4f26835dac
@ -4,6 +4,8 @@ import {
|
||||
createVNode,
|
||||
VNodeArrayChildren,
|
||||
Fragment,
|
||||
Text,
|
||||
Comment,
|
||||
isVNode
|
||||
} from './vnode'
|
||||
import { Teleport, TeleportProps } from './components/Teleport'
|
||||
@ -84,6 +86,16 @@ export function h(
|
||||
children?: RawChildren | RawSlots
|
||||
): VNode
|
||||
|
||||
// text/comment
|
||||
export function h(
|
||||
type: typeof Text | typeof Comment,
|
||||
children?: string | number | boolean
|
||||
): VNode
|
||||
export function h(
|
||||
type: typeof Text | typeof Comment,
|
||||
props?: null,
|
||||
children?: string | number | boolean
|
||||
): VNode
|
||||
// fragment
|
||||
export function h(type: typeof Fragment, children?: VNodeArrayChildren): VNode
|
||||
export function h(
|
||||
|
3
packages/runtime-dom/types/jsx.d.ts
vendored
3
packages/runtime-dom/types/jsx.d.ts
vendored
@ -26,6 +26,7 @@
|
||||
// Kanitkorn Sujautra <https://github.com/lukyth>
|
||||
// Sebastian Silbermann <https://github.com/eps1lon>
|
||||
|
||||
import { VNode } from '@vue/runtime-core'
|
||||
import * as CSS from 'csstype'
|
||||
|
||||
export interface CSSProperties extends CSS.Properties<string | number> {
|
||||
@ -1338,7 +1339,7 @@ type NativeElements = {
|
||||
|
||||
declare global {
|
||||
namespace JSX {
|
||||
interface Element {}
|
||||
interface Element extends VNode {}
|
||||
interface ElementClass {
|
||||
$props: {}
|
||||
}
|
||||
|
@ -1,4 +1,6 @@
|
||||
import {
|
||||
h,
|
||||
Text,
|
||||
FunctionalComponent,
|
||||
expectError,
|
||||
expectType,
|
||||
@ -6,7 +8,7 @@ import {
|
||||
} from './index'
|
||||
|
||||
// simple function signature
|
||||
const Foo = (props: { foo: number }) => props.foo
|
||||
const Foo = (props: { foo: number }) => h(Text, null, props.foo)
|
||||
|
||||
// TSX
|
||||
expectType<JSX.Element>(<Foo foo={1} />)
|
||||
|
@ -5,9 +5,11 @@ import {
|
||||
Fragment,
|
||||
Teleport,
|
||||
expectError,
|
||||
expectType
|
||||
expectType,
|
||||
VNode
|
||||
} from './index'
|
||||
|
||||
expectType<VNode>(<div />)
|
||||
expectType<JSX.Element>(<div />)
|
||||
expectType<JSX.Element>(<div id="foo" />)
|
||||
expectType<JSX.Element>(<input value="foo" />)
|
||||
|
Loading…
Reference in New Issue
Block a user