inject.test-d.ts 1.1 KB

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