【发布时间】:2021-01-23 22:09:10
【问题描述】:
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,
})
由于参数不相关,因此无法编译。不知何故,我需要 value 受到 field 类型的约束。
谢谢
【问题讨论】:
标签: javascript typescript types