[英]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.