能否获取TypeScript类型名称的字符串表示用于模板字面量类型?
结论
TypeScript 类型系统目前原生不支持在类型层面直接提取类型的定义名称并转换为字符串字面量。
原因说明
TypeScript 采用结构化类型系统,类型检查只关注类型的结构特征,不会将你定义类型时使用的标识符名称作为类型的元数据保留。比如你定义的 type MyType = {field:string},TS 内部只会将其识别为「包含 string 类型 field 字段的对象类型」,MyType 这个名称仅作为你编写代码时的别名存在,不会参与类型运算,自然无法被提取为字符串字面量。
替代方案
如果你需要实现自定义的编译报错提示,可以主动传入类型名的字符串字面量,复用你现有的 ErrorBrand 逻辑即可达到效果:
type ErrorBrand<Err extends string> = Readonly<{ [k in Err]: void; }>; type MyErrorMsgType<T extends string> = ErrorBrand<`The following type caused an error - ${T}`> // 手动传入类型对应的名称字符串 type MyTypeError = MyErrorMsgType<'MyType'> // 编译报错时会展示:The following type caused an error - MyType
内容的提问来源于stack exchange,提问作者james
相关产品推荐
相关产品推荐

