Javascript Typescript:返回预定义联合类型的函数
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
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