| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { ref, computed, watch, expectType, defineComponent } from './index'
- const source = ref('foo')
- const source2 = computed(() => source.value)
- const source3 = () => 1
- // lazy watcher will have consistent types for oldValue.
- watch(source, (value, oldValue) => {
- expectType<string>(value)
- expectType<string>(oldValue)
- })
- watch([source, source2, source3], (values, oldValues) => {
- expectType<[string, string, number]>(values)
- expectType<[string, string, number]>(oldValues)
- })
- // const array
- watch([source, source2, source3] as const, (values, oldValues) => {
- expectType<Readonly<[string, string, number]>>(values)
- expectType<Readonly<[string, string, number]>>(oldValues)
- })
- // immediate watcher's oldValue will be undefined on first run.
- watch(
- source,
- (value, oldValue) => {
- expectType<string>(value)
- expectType<string | undefined>(oldValue)
- },
- { immediate: true }
- )
- watch(
- [source, source2, source3],
- (values, oldValues) => {
- expectType<[string, string, number]>(values)
- expectType<[string | undefined, string | undefined, number | undefined]>(
- oldValues
- )
- },
- { immediate: true }
- )
- // const array
- watch(
- [source, source2, source3] as const,
- (values, oldValues) => {
- expectType<Readonly<[string, string, number]>>(values)
- expectType<
- Readonly<[string | undefined, string | undefined, number | undefined]>
- >(oldValues)
- },
- { immediate: true }
- )
- // should provide correct ref.value inner type to callbacks
- const nestedRefSource = ref({
- foo: ref(1)
- })
- watch(nestedRefSource, (v, ov) => {
- expectType<{ foo: number }>(v)
- expectType<{ foo: number }>(ov)
- })
- const someRef = ref({ test: 'test' })
- const otherRef = ref({ a: 'b' })
- watch([someRef, otherRef], values => {
- const value1 = values[0]
- // no type error
- console.log(value1.test)
- const value2 = values[1]
- // no type error
- console.log(value2.a)
- })
- // #6135
- defineComponent({
- data() {
- return { a: 1 }
- },
- created() {
- this.$watch(
- () => this.a,
- (v, ov) => {
- expectType<number>(v)
- expectType<number>(ov)
- }
- )
- }
- })
|