我在Form中创建了一个简单的TypeScript类:
class Form<FormData> {
protected data: FormData;
constructor(data: FormData) {
this.data = data;
}
}我添加了type参数,以便输入表单在实例化该类时应该接收的数据。例如:
interface UpdateUserForm {
name: string;
email: string;
}
const updateUserForm = new Form<UpdateUserForm>;但是,当尝试将我的Form类用作其他类的参数时,我遇到了问题,因为它期待的是该类型。所以,给出这样一种方法:
class Http {
post(url: string, form: Form) {
return axios(url, form.data);
}
}我得到以下错误:
泛型类型“表单”需要一个类型参数。
但是,我不知道这个方法中的FormData类型是泛型的。
我将如何正确地进行类型提示这个form参数?
发布于 2021-08-05 12:44:45
正如@jonrsharpe在注释中所说的那样,您可以使该方法成为通用方法,如下所示:
post<FormDataType>(url: string, form: Form<FormDataType>) {
// ...
}当您调用它时,TypeScript将根据传递给它的Form类型推断类型参数。例如,如果您有:
const niftyForm = new Form<NiftyData>(/*...*/);
// ...
http.post("/some/url", niftyForm);...TypeScript将从niftyForm (即Form<NiftyData>)类型中推断post的类型参数的NiftyData。(您也可以显式地提供它,但是没有必要使用这个post方法。当无法推断时,需要显式类型参数,例如,如果它们驱动方法的返回类型,否则无法完全指定它返回的内容,因为它太动态了。)
在手册中关于仿制药的一节中有更多的例子。
https://stackoverflow.com/questions/68666499
复制相似问题