【发布时间】:2019-03-20 15:23:42
【问题描述】:
我想创建需要可选参数之一的函数类型。
据我所知是制作条件类型,但问题是在函数打字稿中不能根据这个条件缩小类型
type a = { propA: number };
type b = { propB: string };
type OneOfIsRequired = <T extends a | undefined, S extends b | undefined>
(parameterOne: S extends undefined ? a : T, parameterTwo?: T extends undefined ? b : S, x: number) => any;
const fn: OneOfIsRequired = (a, b) => {
if (a) {
const propA = a.propA;
} else {
const propB = b.propB; // Object is possibly 'undefined'.. typescript can not narrow type based on first if statement
}
};
fn(undefined, undefined, 1); // Argument of type 'undefined' is not assignable to parameter of type 'a' OK !, one of parameter is required
fn({ propA: 1 }, undefined, 1);
fn(undefined, { propB: '1' }, 1);
所以我希望在 lse 条件下,我的函数 typescript 可以缩小正确的类型,即类型“b”而不是“b | undefined”
知道如何实现这种行为吗?我不想自己重新输入它
【问题讨论】:
标签: typescript