mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-04-03 23:12:14 +08:00
20 lines
467 B
TypeScript
20 lines
467 B
TypeScript
|
|
let globalStableObjectKeySeed = 0
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 为对象实例生成稳定 key(基于 WeakMap,不污染业务对象)
|
|||
|
|
*/
|
|||
|
|
export function createStableObjectKeyResolver<T extends object>(prefix = 'item') {
|
|||
|
|
const keyMap = new WeakMap<T, string>()
|
|||
|
|
|
|||
|
|
return (item: T): string => {
|
|||
|
|
const cached = keyMap.get(item)
|
|||
|
|
if (cached) {
|
|||
|
|
return cached
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const key = `${prefix}-${++globalStableObjectKeySeed}`
|
|||
|
|
keyMap.set(item, key)
|
|||
|
|
return key
|
|||
|
|
}
|
|||
|
|
}
|