tsx.test-d.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // TSX w/ defineComponent is tested in defineComponent.test-d.tsx
  2. import { KeepAlive, Suspense, Fragment, Teleport, VNode } from 'vue'
  3. import { expectType } from './utils'
  4. expectType<VNode>(<div />)
  5. expectType<JSX.Element>(<div />)
  6. expectType<JSX.Element>(<div id="foo" />)
  7. expectType<JSX.Element>(<div>hello</div>)
  8. expectType<JSX.Element>(<input value="foo" />)
  9. // @ts-expect-error style css property validation
  10. ;<div style={{ unknown: 123 }} />
  11. // allow array styles and nested array styles
  12. expectType<JSX.Element>(<div style={[{ color: 'red' }]} />)
  13. expectType<JSX.Element>(
  14. <div style={[{ color: 'red' }, [{ fontSize: '1em' }]]} />
  15. )
  16. // #7955
  17. expectType<JSX.Element>(<div style={[undefined, '', null, false]} />)
  18. expectType<JSX.Element>(<div style={undefined} />)
  19. expectType<JSX.Element>(<div style={null} />)
  20. expectType<JSX.Element>(<div style={''} />)
  21. expectType<JSX.Element>(<div style={false} />)
  22. // @ts-expect-error
  23. ;<div style={[0]} />
  24. // @ts-expect-error
  25. ;<div style={0} />
  26. // @ts-expect-error unknown prop
  27. ;<div foo="bar" />
  28. // allow key/ref on arbitrary element
  29. expectType<JSX.Element>(<div key="foo" />)
  30. expectType<JSX.Element>(<div ref="bar" />)
  31. expectType<JSX.Element>(
  32. <input
  33. onInput={e => {
  34. // infer correct event type
  35. expectType<EventTarget | null>(e.target)
  36. }}
  37. />
  38. )
  39. // built-in types
  40. expectType<JSX.Element>(<Fragment />)
  41. expectType<JSX.Element>(<Fragment key="1" />)
  42. expectType<JSX.Element>(<Teleport to="#foo" />)
  43. expectType<JSX.Element>(<Teleport to="#foo" key="1" />)
  44. // @ts-expect-error
  45. ;<Teleport />
  46. // @ts-expect-error
  47. ;<Teleport to={1} />
  48. // KeepAlive
  49. expectType<JSX.Element>(<KeepAlive include="foo" exclude={['a']} />)
  50. expectType<JSX.Element>(<KeepAlive key="1" />)
  51. // @ts-expect-error
  52. ;<KeepAlive include={123} />
  53. // Suspense
  54. expectType<JSX.Element>(<Suspense />)
  55. expectType<JSX.Element>(<Suspense key="1" />)
  56. expectType<JSX.Element>(
  57. <Suspense onResolve={() => {}} onFallback={() => {}} onPending={() => {}} />
  58. )
  59. // @ts-expect-error
  60. ;<Suspense onResolve={123} />