首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在TypeScript中键入泛型作为参数?

如何在TypeScript中键入泛型作为参数?
EN

Stack Overflow用户
提问于 2021-08-05 12:21:38
回答 1查看 506关注 0票数 0

我在Form中创建了一个简单的TypeScript类:

代码语言:javascript
运行
复制
class Form<FormData> {
    protected data: FormData;

    constructor(data: FormData) {
        this.data = data;
    }
}

我添加了type参数,以便输入表单在实例化该类时应该接收的数据。例如:

代码语言:javascript
运行
复制
interface UpdateUserForm {
    name: string;
    email: string;
}

const updateUserForm = new Form<UpdateUserForm>;

但是,当尝试将我的Form类用作其他类的参数时,我遇到了问题,因为它期待的是该类型。所以,给出这样一种方法:

代码语言:javascript
运行
复制
class Http {
    post(url: string, form: Form) {
        return axios(url, form.data);
    }
}

我得到以下错误:

泛型类型“表单”需要一个类型参数。

但是,我不知道这个方法中的FormData类型是泛型的。

我将如何正确地进行类型提示这个form参数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 12:44:45

正如@jonrsharpe在注释中所说的那样,您可以使该方法成为通用方法,如下所示:

代码语言:javascript
运行
复制
post<FormDataType>(url: string, form: Form<FormDataType>) {
    // ...
}

当您调用它时,TypeScript将根据传递给它的Form类型推断类型参数。例如,如果您有:

代码语言:javascript
运行
复制
const niftyForm = new Form<NiftyData>(/*...*/);
// ...
http.post("/some/url", niftyForm);

...TypeScript将从niftyForm (即Form<NiftyData>)类型中推断post的类型参数的NiftyData。(您也可以显式地提供它,但是没有必要使用这个post方法。当无法推断时,需要显式类型参数,例如,如果它们驱动方法的返回类型,否则无法完全指定它返回的内容,因为它太动态了。)

手册中关于仿制药的一节中有更多的例子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68666499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档