Javascript Typescript:返回预定义联合类型的函数

Javascript Typescript:返回预定义联合类型的函数,javascript,typescript,types,Javascript,Typescript,Types,TypeScript中是否有一种方法可以建模一个可以返回已指定的联合类型的函数,如下面示例中的myFunc type UnionType = { field: "one", value: "two" } | { field: "a" | "b", value: "a1" | "b1" | "c1" } myFunc("one&qu

TypeScript中是否有一种方法可以建模一个可以返回已指定的联合类型的函数,如下面示例中的
myFunc

type UnionType = {
  field: "one",
  value: "two"
} | {
  field: "a" | "b",
  value: "a1" | "b1" | "c1"
}

myFunc("one", "two") // OK
myFunc("a", "a1") // OK
myFunc("a", "b1") // OK
myFunc("b", "a1") // OK

myFunc("one", "a1") // ERROR: only allowed second argument should be "two"
myFunc("one", "a") // ERROR: only allowed second argument should be "two"
myFunc("a", "two") // ERROR: only allowed second argument should be "a1" or "b1" or "c1"
第一种天真的方法可能是这样的:

const myFunc = <T extends UnionType>(field: T["field"], value: T["value"]): UnionType => ({
  field,
  value,
})
constmyfunc=(字段:T[“field”],值:T[“value”]):UnionType=>({
领域
价值
})
无法编译,因为参数不相关。不知何故,我需要
字段
类型的约束

谢谢

键入推断值=
//使用'extends'关键字进行限制,请参阅TypeScript'Exclude'实现
T延伸(
//获取匹配的结构,但不能直接使用
{
字段:K;
价值:任何;
}延伸T
T
:从不
)
? T[“值”]
:从不;
常量myFunc=(
字段:K,
值:推断值
):any=>({//any)
领域
价值
});

太好了,非常感谢,这几乎正是我需要的!我想弄清楚为什么
myFunc
需要返回
any
,因为它看起来似乎不是必需的。此外,对于我的用例,我需要
myFunc
专门返回
UnionType
。现在,我在返回的对象上使用类型断言来解决这个问题,但我试图看看是否有办法避免它。返回
any
并不重要,您也可以将
用作UnionType