[Typescript] Identity function pattern - Using Identity function to enforce the type 01
So we have the configObj look like this:
export const configObj = {
routes: ["/", "/about", "/contact"],
fetchers: {
// @ts-expect-error
"/does-not-exist": () => {
return {};
},
},
};
The problelm is that for fetchers
, you can name the key which not in the routes
.
We want to enforce the type safety so that the key in fetchers
must present in routes
.
To do that using identity function is good option. Because it return what pass in, so it doesn't change the value. But we can add type checking in order to enforce the type.
The beautiful part of identity function is that it will be removed by most minifer tool, so it won't cause any runtime overhead.
Solution with indetity function:
// Typescript will infer `routes`
// function makeConfig<"/" | "/about" | "/contact">(config: ConfigObj<"/" | "/about" | "/contact">): ConfigObj<"/" | "/about" | "/contact">
type ConfigObj<TRoute extends string> = {
routes: TRoute[];
fetchers: {
[Key in TRoute]: any;
};
};
function makeConfig<TRoute extends string>(config: ConfigObj<TRoute>) {
return config;
}
export const configObj = makeConfig({
routes: ['/', '/about', '/contact'],
fetchers: {
// @ts-expect-error
'/does-not-exist': () => {
return {};
},
},
});
Solution 2:
function makeConfigObj<Route extends string>(config: {
routes: Route[];
fetchers: { [Key in Route]: () => void };
}) {
return config;
}
export const configObj = makeConfigObj({
routes: ['/', '/about', '/contact'],
fetchers: {
// @ts-expect-error
'/does-not-exist': () => {
return {};
},
},
});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-02-24 [Serverless CLI + AWS] Get started with Serverless and AWS lambda
2020-02-24 [Javascript] You can't pass a variable
2019-02-24 [JS Compose] 7. Ensure failsafe combination using monoids
2019-02-24 [Functional Programming] Monad
2019-02-24 [Algorithm] Count Negative Integers in Row/Column-Wise Sorted Matrix
2019-02-24 [Ramda] Lens in Depth
2019-02-24 [React] Use the useReducer Hook and Dispatch Actions to Update State (useReducer, useMemo, useEffect)