Просмотр исходного кода

feat: expose set/del as named exports

Evan You 3 лет назад
Родитель
Сommit
5673363eda
3 измененных файлов с 22 добавлено и 3 удалено
  1. 6 2
      src/core/observer/index.ts
  2. 1 0
      src/v3/index.ts
  3. 15 1
      types/test/v3/reactivity-test.ts

+ 6 - 2
src/core/observer/index.ts

@@ -225,8 +225,10 @@ export function defineReactive(
  * triggers change notification if the property doesn't
  * already exist.
  */
+export function set<T>(array: T[], key: number, value: T): T
+export function set<T>(object: object, key: string | number, value: T): T
 export function set(
-  target: Array<any> | Record<string, any>,
+  target: any[] | Record<string, any>,
   key: any,
   val: any
 ): any {
@@ -279,7 +281,9 @@ export function set(
 /**
  * Delete a property and trigger change if necessary.
  */
-export function del(target: Array<any> | Object, key: any) {
+export function del<T>(array: T[], key: number): void
+export function del(object: object, key: string | number): void
+export function del(target: any[] | object, key: any) {
   if (__DEV__ && (isUndef(target) || isPrimitive(target))) {
     warn(
       `Cannot delete reactive property on undefined, null, or primitive value: ${target}`

+ 1 - 0
src/v3/index.ts

@@ -72,5 +72,6 @@ export { h } from './h'
 export { getCurrentInstance } from './currentInstance'
 export { useSlots, useAttrs } from './apiSetup'
 export { nextTick } from 'core/util/next-tick'
+export { set, del } from 'core/observer'
 
 export * from './apiLifecycle'

+ 15 - 1
types/test/v3/reactivity-test.ts

@@ -11,7 +11,9 @@ import {
   shallowReactive,
   readonly,
   markRaw,
-  shallowReadonly
+  shallowReadonly,
+  set,
+  del
 } from '../../index'
 import { describe, expectType } from '../utils'
 
@@ -371,3 +373,15 @@ describe('shallowReadonly ref unwrap', () => {
   expectType<Ref>(r.count.n)
   r.count.n.value = 123
 })
+
+describe('set/del', () => {
+  set({}, 1, 'hi')
+  set([], 1, 'bye')
+  del({}, 'foo')
+  del([], 1)
+
+  // @ts-expect-error
+  set({}, 1)
+  // @ts-expect-error
+  del([], 'fse', 123)
+})