使TypeScript推断类型别名

使TypeScript推断类型别名,typescript,Typescript,我有一个类型别名,它是一个大联合体 type ErrorMsg= |{消息:“oops”,数据:number} |{消息:'opa'} |{消息:“oopsie”,数据:string} |{消息:“哎哟”} | ... 现在,我将使用ErrorMsg获得一些其他定义。为了简单起见,我们假设 type NumberValidator=(n:number)=>E |“ok” 问题是,当使用验证程序TypeScript时,除非我在手动注释中明确指定别名,否则它确实喜欢给我涉及整个类型联合的错误消息

我有一个类型别名,它是一个大联合体

type ErrorMsg=
|{消息:“oops”,数据:number}
|{消息:'opa'}
|{消息:“oopsie”,数据:string}
|{消息:“哎哟”}
| ...
现在,我将使用ErrorMsg获得一些其他定义。为了简单起见,我们假设

type NumberValidator=(n:number)=>E |“ok”
问题是,当使用
验证程序
TypeScript时,除非我在手动注释中明确指定别名,否则它确实喜欢给我涉及整个类型联合的错误消息,而不是它的别名的名称

在生成错误和推断类型时,是否有任何技巧可以使TypeScript在别名上“说话”

我所说的是典型的TypeScript错误,看起来像是类型验证器的
参数不可分配给类型验证器
,以及在编辑器中将鼠标悬停在定义上时出现的推断类型中存在的巨型类型


谢谢

类型别名实际上是一种类型的简写。这有助于把它们写下来,但它们会扩展到原来的版本。我不确定你能不能把它转换成一个类型名。例如,您可以将类型别名设置为接口,然后就可以知道接口名称
type alias=MyInterface
。但你在这里集合了一帮人。也许您可以使用<代码>扩展< /COD>继承来创建一个公共的派生类型。@ VLAZ,我简要地考虑了定义<代码>接口Error MSG的方法扩展了实际联盟,但这是不允许的(不能扩展联盟)。目前我最好的解决方法是简单地将联合体包装在一个类中。然后,TypeScript使用它的名义类型名,但这会带来一些不必要的不便,如果可能的话,我想避免。是的,您不能扩展联合,但根据数据的形状,您可能可以拥有
接口基{message:string}
它们
接口错误1扩展基{data:number}
例如。它可能并不总是适用的,但这是我能想到的获得实际类型名的唯一方法。你能提供一组代码,让你得到你所说的太长的智能感知吗?类型别名实际上就是一个类型的简写。这有助于把它们写下来,但它们会扩展到原来的版本。我不确定你能不能把它转换成一个类型名。例如,您可以将类型别名设置为接口,然后就可以知道接口名称
type alias=MyInterface
。但你在这里集合了一帮人。也许您可以使用<代码>扩展< /COD>继承来创建一个公共的派生类型。@ VLAZ,我简要地考虑了定义<代码>接口Error MSG的方法扩展了实际联盟,但这是不允许的(不能扩展联盟)。目前我最好的解决方法是简单地将联合体包装在一个类中。然后,TypeScript使用它的名义类型名,但这会带来一些不必要的不便,如果可能的话,我想避免。是的,您不能扩展联合,但根据数据的形状,您可能可以拥有
接口基{message:string}
它们
接口错误1扩展基{data:number}
例如。它可能并不总是适用的,但这是我能想到的获得实际类型名的唯一方法。你能提供一组代码,让你得到你所说的过长的智能感知吗?