TypeScript从不输入C#?

TypeScript从不输入C#?,c#,typescript,types,C#,Typescript,Types,我想知道TypeScript是否有c#等价物 例如,如果我在TS中编写此代码,我将有一个构建时错误 枚举操作类型{ 添加 去除 } 类型IAdd={type:ActionTypes.Add}; 类型IRemove={type:ActionTypes.Remove}; IAction类型=Idd | IRemove; const ensureNever=(操作:从不)=>操作; 功能测试(动作:IAction){ 开关(动作类型){ 案例操作类型。添加: 打破 违约: 保证人(行动); 打破 }

我想知道TypeScript是否有c#等价物

例如,如果我在TS中编写此代码,我将有一个构建时错误

枚举操作类型{
添加
去除
}
类型IAdd={type:ActionTypes.Add};
类型IRemove={type:ActionTypes.Remove};
IAction类型=Idd | IRemove;
const ensureNever=(操作:从不)=>操作;
功能测试(动作:IAction){
开关(动作类型){
案例操作类型。添加:
打破
违约:
保证人(行动);
打破
}
}
错误是:
类型为“IRemove”的参数不能分配给类型为“never”的参数。

当有人改变一个文件中的逻辑时,这是非常有用的,我想确保这个新案例在任何地方都能得到处理

在c#中有什么方法可以做到这一点吗?(我搜索了一下,但什么也没找到)

这就是我目前所拥有的

使用系统;
班级计划
{
私有枚举操作类型
{
添加
去除
}
界面位移{
ActionTypes类型{get;}
}
类添加操作:IAction
{
公共操作类型
{
得到{
返回操作类型。添加;
}
}
}
类删除操作:IAction
{
公共操作类型
{
得到
{
返回操作类型。删除;
}
}
}
静态空隙试验(IAction作用)
{
开关(动作类型)
{
案例操作类型。添加:
Console.WriteLine(“ActionTypes.Add”);
打破
违约:
//我应该在这里放些什么来确保它永远不会到达?
Console.WriteLine(“默认”);
打破
}
}
静态void Main(字符串[]参数)
{
var action=new RemoveAction();
程序、测试(行动);
}
}

我想确定我在构建时而不是运行时出错。

不幸的是,我认为C#编译器不够聪明,无法做到这一点。即使在
action.Type
上的switch语句的默认情况下抛出新异常,也不会出现有关缺少的
ActionTypes.Remove
情况的编译时错误


我发现关于
never
类型,它“不太可能成为主流CLR语言的特征。”

TypeScript是一个词,没有空间。如果有人更改枚举或指定了一个您不希望允许的有效枚举值,我认为没有任何方法会导致编译时错误。不,C#中没有空类型。@RufusL谢谢!这就是我的问题。我有同样的假设。不管怎样,我希望有人知道怎么做。