TypeScript字符串插值类型能否实现自动补全?
TypeScript字符串插值类型能否实现自动补全?
嘿,这个问题问得太实用了!当然可以用TypeScript的字符串插值类型同时拿到自动补全支持啦~ 你现在的代码能做类型检查但没触发补全,大概率是因为还没结合泛型约束或者预生成类型的技巧,下面给你结合你的Tailwind断点场景一步步讲怎么实现:
首先先把你没写完的断点类型补全,方便后续演示:
type TailwindBreakpoint = | "(max-width: 640px)" | "(min-width: 641px) and (max-width: 768px)" | "(min-width: 769px) and (max-width: 1024px)" | "(min-width: 1025px)";
场景1:函数参数里的自动补全
如果你的插值是在函数调用时用的,那给参数加上泛型约束就能触发补全了:
// 泛型函数,约束T必须是TailwindBreakpoint的子类型 function makeResponsiveStyle<T extends TailwindBreakpoint>(breakpoint: T, css: string) { return `@media ${breakpoint} { ${css} }`; } // 现在调用这个函数时,输入第一个参数,TypeScript会自动弹出所有断点选项供你选择! makeResponsiveStyle("(min-width: 641px) and (max-width: 768px)", "display: flex;");
场景2:预生成所有插值组合,直接用类型补全
如果你想提前生成所有可能的插值结果,让使用时直接选,用模板字面量类型预组合就行:
// 先拆成更灵活的断点标识和样式属性 type BreakpointKey = "sm" | "md" | "lg" | "xl"; type BreakpointMap = { sm: "(max-width: 640px)"; md: "(min-width: 641px) and (max-width: 768px)"; lg: "(min-width: 769px) and (max-width: 1024px)"; xl: "(min-width: 1025px)"; }; type CssProp = "flex" | "grid" | "block"; // 预生成所有`@media 断点 { 样式 }`的组合类型 type ResponsiveMediaQuery = `@media ${BreakpointMap[keyof BreakpointMap]} { ${CssProp}: 1; }`; // 现在使用这个类型时,会自动补全所有预生成的媒体查询字符串! const mediaQuery: ResponsiveMediaQuery = "@media (min-width: 641px) and (max-width: 768px) { flex: 1; }";
为什么之前的代码没触发补全?
如果只是直接写const media = ${bp} { ... }``,当你手动输入bp的内容时,TypeScript不会主动触发补全提示,但把它放到泛型约束的参数里,或者预先生成所有可能的类型组合,TypeScript就能识别出所有合法选项,自动弹出补全菜单了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

