繁体   English   中英

将联合类型与泛型一起使用

[英]Using union type with generic

我有一个 function 接受一个参数,该参数是一个由字段(字符串)和 arguments(对象文字)组成的 object。

我希望根据字段内容验证 arguments 类型检查。 我还希望做出一个可以在我需要的任何地方扩展的定义(因此是通用的)。

定义:

 export interface EventDefinition<
    TField extends string,
    TArgs extends any
  > {
    field: TField
    arguments: TArgs
  }

我的function:


export const myFn =  (
  params:
    | EventDefinition<
        'actionOne',
        {
          id: string
        }
      >
    | EventDefinition<
        'actionTwo',
        {
          emailAddress: string
        }
      >
) => {
  const { args, field } = params

  switch(field) {
    case 'actionOne':
      console.log(args.id)
      break;
      case 'actionTwo':
      console.log(args.emailAddress)
      break;
  }
}

虽然 field 属性验证 args 不验证并导致错误(对于带有 args.id 的 ex):

Property 'id' does not exist on type '{ id: string }'.
Property 'id' does not exist on type '{ emailAddress: string; }'.

我怎样才能正确定义这个?

Typescript 不会基于一个变量保护另一个变量,这只是不受支持。

如果您使用参数本身,控制流分析可以适当地确定类型

  switch(params.field) {
    case 'actionOne':
      console.log(params.arguments.id)
      break;
      case 'actionTwo':
      console.log(params.arguments.emailAddress)
      break;
  }

游乐场链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM