观察此打字稿代码:
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
的方法,但在我的实际应用中,这样做会令人讨厌。
感谢您的帮助。
答案 0 :(得分:1)
让它们共享相同类型的参数T
意味着它们都受到相同约束的约束,而不是让一个定义另一个约束的边界。如果希望m
的类型受传递给cli
的类型参数的限制,则应将它们指定为单独的类型参数,一个取决于另一个。例如:
let dist = function <T extends string, U extends T>(m: U, c: cli<T>): void { };