tsx-test.tsx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { VNode, defineComponent } from '../../index'
  2. import { expectType } from '../utils'
  3. expectType<VNode>(<div />)
  4. expectType<JSX.Element>(<div />)
  5. expectType<JSX.Element>(<div id="foo" />)
  6. expectType<JSX.Element>(<input value="foo" />)
  7. // @ts-expect-error style css property validation
  8. expectError(<div style={{ unknown: 123 }} />)
  9. // allow array styles and nested array styles
  10. expectType<JSX.Element>(<div style={[{ color: 'red' }]} />)
  11. expectType<JSX.Element>(
  12. <div style={[{ color: 'red' }, [{ fontSize: '1em' }]]} />
  13. )
  14. // @ts-expect-error unknown prop
  15. expectError(<div foo="bar" />)
  16. // allow key/ref on arbitrary element
  17. expectType<JSX.Element>(<div key="foo" />)
  18. expectType<JSX.Element>(<div ref="bar" />)
  19. expectType<JSX.Element>(
  20. <input
  21. onInput={e => {
  22. // infer correct event type
  23. expectType<EventTarget | null>(e.target)
  24. }}
  25. />
  26. )
  27. const Foo = defineComponent({
  28. props: {
  29. foo: String,
  30. bar: {
  31. type: Number,
  32. required: true
  33. }
  34. }
  35. })
  36. // @ts-expect-error
  37. ;<Foo />
  38. // @ts-expect-error
  39. ;<Foo bar="1" />
  40. // @ts-expect-error
  41. ;<Foo bar={1} foo={2} />
  42. // working
  43. ;<Foo bar={1} />
  44. ;<Foo bar={1} foo="baz" />
  45. ;<div slot="x" />