函数泛型受参数类型约束

时间:2017-03-17 18:33:28

标签: 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);

我喜欢的错误是&#34; bar&#34;不是&#34; foo&#34;但是如果你实际检查实际上没有错误,因为dist推断出类型参数"foo" | "bar"。我试图找出如何解决这个问题。

在我看来,一种方法是使dist函数成为cli的方法,但在我的实际应用中,这样做会令人讨厌。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

让它们共享相同类型的参数T意味着它们都受到相同约束的约束,而不是让一个定义另一个约束的边界。如果希望m的类型受传递给cli的类型参数的限制,则应将它们指定为单独的类型参数,一个取决于另一个。例如:

let dist = function <T extends string, U extends T>(m: U, c: cli<T>): void { };