给定类型的Require参数基于TypeScript中的另一个参数

手电筒

让我们拥有用于发送电子邮件的TypeScript函数:

enum ETemplate {
  EXAMPLE1, EXAMPLE2
}

function sendEmail(to: string, template: ETemplate, params: IParams): Promise<void>{
  await this.mailService.send(to, template, params);
}

interface IParams {
  // depends on template type (ETemplate)
}

params根据我输入的模板类型如何要求之所以这样,是因为每个模板都IParams基于ETemplate

我知道TypeScript具有泛型,但是我不确定是否可以使用它们来实现。

伊德拉波

在这种情况下,您不需要使用泛型。改用有区别的联合

enum TemplateType {
    Template1,
    Template2
}

type Template =
    | { type: TemplateType.Template1, params: { aaa: number } }
    | { type: TemplateType.Template2, params: { bbb: string, ccc?: boolean } };

const sendEmail = async (to: string, template: Template): Promise<void> => {
    if (template.type === TemplateType.Template1) {
        template.params.aaa; // number

        return;
    }

    if (template.type === TemplateType.Template2) {
        template.params.bbb; // string
        template.params.ccc; // boolean | undefined

        return;
    }

    template; // never
}


sendEmail("[email protected]", { type: TemplateType.Template1, params: { aaa: 123 } }); // OK
sendEmail("[email protected]", { type: TemplateType.Template2, params: { aaa: 123 } }); // Error as expected

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

类型提示,其中一个参数是另一个参数的类型

无法将结构类型参数传递给另一个包中的函数

如何使用基于另一个参数的对象列表中的参数?(JavaScript)

Roslyn-在另一个TypeInfo中获取类型参数的TypeInfo

基于第一个参数类型的TypeScript第二个参数类型

根据TypeScript中的另一个通用参数推断通用类型参数

如何将另一个模块中的类型用作JSDoc返回/参数类型

TypeScript是否可以基于另一个参数来调整参数?

“一个功能参数如何与javascript中的另一个功能参数连接?”

基于另一个参数的条件where子句

如何创建一个返回另一个函数的函数,在C中隐式包含给定参数?

如何使用click在Python中基于另一个参数的值使参数成为可选参数?

打字稿| 使用参数将类型参数传递给另一个类型

基于另一个参数约束参数类型的最有效方法

基于另一个参数向argparse添加参数的Python方法

具有基于另一个参数的默认参数的函数

Scala:基于相同层次结构的另一个类型参数值限制参数

如何在Swift中定义一个包含另一个无参数的函数的返回类型?

Rails:基于另一个模型的控制器中的参数创建新模型

是否可以将构造函数用作TypeScript中另一个函数的参数类型?

如何基于SSRS中的另一个参数填充多值参数

对于给定的类型参数,如何声明一个特征与另一个泛型特征等效?

从javascript / typescript中的另一个函数访问函数的参数

基于另一个参数值的条件参数类型

基于另一个参数的打字稿函数参数类型

在函数模板中,如何根据另一个参数确定一个参数的类型

Typescript - 将函数及其参数传递给另一个函数并强制执行参数的数量和类型

是否有将对象参数映射到 TypeScript 中另一个对象的简写?

获取一个参数的值并使其成为另一个参数的类型