inject.test-d.ts 1.0 KB

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