2
0

inject.test-d.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {
  2. type InjectionKey,
  3. type Ref,
  4. createApp,
  5. defineComponent,
  6. inject,
  7. provide,
  8. ref,
  9. } from 'vue'
  10. import { expectType } from './utils'
  11. // non-symbol keys
  12. provide('foo', 123)
  13. provide(123, 123)
  14. const key: InjectionKey<number> = Symbol()
  15. provide(key, 1)
  16. // @ts-expect-error
  17. provide(key, 'foo')
  18. // @ts-expect-error
  19. provide(key, null)
  20. expectType<number | undefined>(inject(key))
  21. expectType<number>(inject(key, 1))
  22. expectType<number>(inject(key, () => 1, true /* treatDefaultAsFactory */))
  23. expectType<() => number>(inject('foo', () => 1))
  24. expectType<() => number>(inject('foo', () => 1, false))
  25. expectType<number>(inject('foo', () => 1, true))
  26. // #8201
  27. type Cube = {
  28. size: number
  29. }
  30. const injectionKeyRef = Symbol('key') as InjectionKey<Ref<Cube>>
  31. // @ts-expect-error
  32. provide(injectionKeyRef, ref({}))
  33. // naive-ui: explicit provide type parameter
  34. provide<Cube>('cube', { size: 123 })
  35. provide<Cube>(123, { size: 123 })
  36. provide<Cube>(injectionKeyRef, { size: 123 })
  37. // @ts-expect-error
  38. provide<Cube>('cube', { size: 'foo' })
  39. // @ts-expect-error
  40. provide<Cube>(123, { size: 'foo' })
  41. // #10602
  42. const app = createApp({})
  43. // @ts-expect-error
  44. app.provide(injectionKeyRef, ref({}))
  45. defineComponent({
  46. provide: {
  47. [injectionKeyRef]: { size: 'foo' },
  48. },
  49. })