如何避免TypeScript模板字面量联合类型展开,实现指定IDE提示格式?
TypeScript实现自定义格式的类型键名提示
你当前的代码会生成多个独立的字符串字面量联合,但要实现Keys are "foo" | "bar" | "baz"的提示格式,需要针对TypeScript模板字符串的联合类型处理特性做调整,以下是两种可行方案:
方案1:用中间类型优化提示展示
通过定义中间类型保存带引号的键名联合,再拼接前缀,让IDE在展示时保留联合类型的聚合形式:
type A = { foo: string bar: string baz: string } // 封装带引号的键名联合 type QuotedKeys = `"${keyof A & string}"`; // 拼接前缀生成目标类型 type KeysA = `Keys are ${QuotedKeys}`;
当你悬停在QuotedKeys上时,IDE会直接显示"foo" | "bar" | "baz";悬停在KeysA上时,会展示拼接后的完整字符串联合,间接实现你想要的提示逻辑。
方案2:结合JSDoc注释实现自定义提示
如果希望直接在KeysA的提示中看到Keys are "foo" | "bar" | "baz"的格式,可以用JSDoc注释配合类型推断:
type A = { foo: string bar: string baz: string } type KeyUnion = keyof A & string; /** Keys are "${KeyUnion}" */ type KeysA = `Keys are "${KeyUnion}"`;
此时鼠标悬停在KeysA上,IDE会优先展示JSDoc注释内容,其中KeyUnion会自动解析为"foo" | "bar" | "baz",完全符合你想要的提示格式。
注:TypeScript的模板字符串类型对联合类型默认是分布式处理(即与每个成员单独拼接),所以无法直接生成单一的
Keys are "foo" | "bar" | "baz"字符串字面量类型,上述方案是通过类型封装或注释来实现预期的提示效果。
内容的提问来源于stack exchange,提问作者Sanitysign
相关产品推荐
相关产品推荐

