import isNil from 'lodash/isNil'; import type { TokensType } from './interface'; type Creator = (v: TokensType) => T; type KeyType = [TokensType, Creator]; const StyleMap: Map = new Map(); export const createVar = (token: TokensType, creator: Creator): T => { let myStyle: T; for (const [key, value] of StyleMap) { if (key[1] === creator) { if (key[0] === token) { myStyle = value; } else { StyleMap.delete(key); } } } // @ts-ignore if (!myStyle) { myStyle = creator(token); // 变量覆盖 // @ts-ignore Object.keys(myStyle).forEach((field) => { // @ts-ignore if (!isNil(token[field])) { // @ts-ignore myStyle[field] = token[field]; } }); StyleMap.set([token, creator], myStyle); } return myStyle; };