【发布时间】:2021-08-05 20:44:45
【问题描述】:
我在 TypeScript 中创建了一个简单的 Form 类:
class Form<FormData> {
protected data: FormData;
constructor(data: FormData) {
this.data = data;
}
}
我添加了类型参数,以便我可以在实例化此类时键入表单应接收的数据。例如:
interface UpdateUserForm {
name: string;
email: string;
}
const updateUserForm = new Form<UpdateUserForm>;
但是,当我尝试使用我的 Form 类作为其他类的参数时遇到问题,因为它需要类型。所以,给定一个这样的方法:
class Http {
post(url: string, form: Form) {
return axios(url, form.data);
}
}
我收到以下错误:
通用类型“表单”需要 1 个类型参数。
但是,我不知道这个方法中的 FormData 类型是通用的。
我将如何正确地对这个 form 参数进行类型提示?
【问题讨论】:
-
使 method 通用,所以它可以是例如
Form<T>?请参阅typescriptlang.org/docs/handbook/2/generics.html 中的示例。 -
谢谢。这是否意味着我需要在调用
post方法时不断指定类型,即post<UpdateUserForm>(url, form)?我只是想传递一个Form实例,而不用担心它的类型。 -
@MartinBean - 不,TypeScript 可以从您在调用站点提供给函数的实际表单参数推断它。例如,如果您调用
post的表单的类型为Form<NiftyData>,则调用只是post("/path/to/whatever", theForm),调用时不需要类型参数。 -
谢谢@jonrsharpe,有点误读。马丁,我的意思是
post<FormDataType>(url: string, Form<FormDataType>)。 -
@T.J.Crowder 谢谢,这似乎有效。您可以添加您的评论作为答案吗?然后我可以将此问题标记为已回答。
标签: typescript typescript-generics