[Typescript] Wrap an function with Identity function to provide clean Type API

For the following code:

import { CSSProperties } from 'react';

const useStyled = <TTheme = {}>(func: (theme: TTheme) => CSSProperties) => {
  return {} as CSSProperties;
};

interface MyTheme {
  color: {
    primary: string;
  };
  fontSize: {
    small: string;
  };
}

const buttonStyle = useStyled<MyTheme>((theme) => ({
  color: theme.color.primary,
  fontSize: theme.fontSize.small,
}));

const divStyle = useStyled<MyTheme>((theme) => ({
  backgroundColor: theme.color.primary,
}));

 

Everytime, we need to do useStyled<MyTheme>, we can use identity to wrap `useStyled` to reduce duplication:

import { CSSProperties } from 'react';

const makeUseStyled = <TTheme = {}>() => {
  return (func: (theme: TTheme) => CSSProperties) => {
    return {} as CSSProperties;
  };
};

const useStyled = makeUseStyled<MyTheme>();

interface MyTheme {
  color: {
    primary: string;
  };
  fontSize: {
    small: string;
  };
}

const buttonStyle = useStyled((theme) => ({
  color: theme.color.primary,
  fontSize: theme.fontSize.small,
}));

const divStyle = useStyled((theme) => ({
  backgroundColor: theme.color.primary,
}));

 

posted @   Zhentiw  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-02-25 [Graphql] Apollo Client Example
2021-02-25 [Graphql + Netlify] Solve @Apollo/client CORS problem
2020-02-25 [Unit testing Angular] Complete component code
2020-02-25 [Javascript] Objects and Functions
2020-02-25 [HTML5] Element id binding
2019-02-25 [Functional Programming] Working with two functors(Applicative Functors)-- Part1 --.ap
2019-02-25 [React] Preventing extra re-rendering with function component by using React.memo and useCallback
点击右上角即可分享
微信分享提示