我有以下功能:
异步函数get<;U>;(url:string):承诺<;U>;{
返回getUrl<;u>;(url);
}
但是,可以这样称呼它(TS将U设置为任意):
get('/user-url');
有没有一种方法可以定义这个函数,使得它需要显式地提供U,如中所示
get<;用户>;(“/用户url”);
没有对此的内置支持,但是我们可以设计一个场景,在该场景中,不传入类型参数将使用默认泛型类型参数和条件类型生成错误。也就是说,我们将给U
一个默认值void
。如果默认值是U
的实际值,那么我们将在函数中键入不应真正传入的参数,以获取错误:
异步函数get<;U=无效>;(url:string&;(U extends void?)您必须提供一个类型参数:string)):Promise<;U>;{
返回空值,如有;
}
获取('/user url');//“”类型/user url“”的错误参数不能分配给“”类型的参数“您必须提供一个类型参数””。
类用户{}
获取<;用户>;(“/用户url”);
这个错误消息并不理想,但我认为它会让人明白
编辑:有关在参数类型中使用类型参数的解决方案,请参见此处