Typescript 受参数类型约束的泛型函数
请遵守以下类型脚本代码:Typescript 受参数类型约束的泛型函数,typescript,Typescript,请遵守以下类型脚本代码: class cli<T extends string> {} let dist = function <T extends string>(m:T,c:cli<T>):void { }; let a:cli<"foo"> = new cli(); dist("bar",a); class cli{} 设dist=function(m:T,c:cli):void{ }; 设a:cli=new cli(); 区(“酒吧”,
class cli<T extends string> {}
let dist = function <T extends string>(m:T,c:cli<T>):void {
};
let a:cli<"foo"> = new cli();
dist("bar",a);
class cli{}
设dist=function(m:T,c:cli):void{
};
设a:cli=new cli();
区(“酒吧”,a);
我想要的错误是“bar”不是“foo”,但是如果您实际检查,实际上没有错误,因为dist推断了类型参数“foo”|“bar”
。我正在想办法解决这个问题
在我看来,一种方法是使dist
函数成为cli
的一种方法,但在我的实际应用程序中,这样做将。。。讨厌的
感谢您的帮助。让它们共享相同的类型参数
T
意味着它们都受相同约束的约束,而不是由一个约束定义另一个约束的边界。如果希望m
的类型受传递给cli
的类型参数的限制,则应将它们指定为单独的类型参数,一个取决于另一个。例如:
let dist=function(m:U,c:cli):void{}代码>我不确定是否可以通过推断来实现。TypeScript中的类型系统是duck类型,它不像Java或C#中那样严格。由于foo
和bar
都是字符串,因此编译器将扩展它以使其工作。限制类型的一种方法是显式指定类型:dist('bar',a)
。这将产生错误。但我想这不是你想要的。这样做的问题是,它依赖于用户使类型显式,所以它并不能真正避免你知道的任何错误。