是否可以根据 TypeScript 中的条件类型使函数具有强制参数或可选参数?
这是我目前所得到的:
const foo = <T extends string | number>(
first: T,
second: T extends string ? boolean : undefined
) => undefined;
foo('foo', true); // ok, as intended
foo(2, true); // not ok, as intended
foo(2, undefined); // ok, as intended
foo(2); // compiler error! I want this to be ok
最佳答案
您可以在 3.1 中使用 Tuples in rest parameters and spread expressions 执行此操作
const foo = <T extends string | number>(
first: T,
...a: (T extends string ? [boolean] : [undefined?])
) => undefined;
foo('foo', true); // ok, as intended
foo(2, true); // not ok, as intended
foo(2, undefined); // ok, as intended
foo(2); // ok
但更好的方法是使用重载。
function foo2(first: string, second: boolean) : undefined
function foo2(first: number, second?: undefined): undefined
function foo2<T>(first: T, second?: boolean): undefined{
return undefined
}
foo2('foo', true); // ok, as intended
foo2(2, true); // not ok, as intended
foo2(2, undefined); // ok, as intended
foo2(2); // ok
关于typescript - 基于条件类型的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52318011/