首页 > 解决方案 > 使最后一个参数有条件地可选打字稿

问题描述

我想让函数的最后一个参数有条件地是可选的,例如。如果前一个参数的类型为 null,则将最后一个参数设为可选 ( ?),如果前一个参数有值,则将最后一个参数设为必需。

这可能吗?

Playground here: https://typescript-play.js.org/#code/MYewdgzgLgBAZgV ​​zMGBeGAeAKgRgDQxYBMAfABQAOAhgE5UC2OAXIfjNXfUS7jAKYAPKHzAATCDDAIANtJgB+SXwBufGjxwBKNCRgBvAL4BuAFAmA9OZgALNXxg0+ARwQBLRzFoBzE4mRkAcilZAM1TCytbRwIwEFhHF3d7Yl8kYDJg6TCTIA

标签: typescript

解决方案


您可以使用休息元组的联合来给您这种行为:

const func = (...param: [null, unknown?] | [unknown, unknown]) => {};

func("a", "b"); // okay
func("a"); // error!  Type 'string' is not assignable to type 'null'.
func(null); // okay
func(null, "b"); // okay

或者,您可以使用传统的(TS3.0 之前的)解决方案,重载

const func: {
  (param1: null, param2?: unknown): void; // first call signature
  (param1: unknown, param2: unknown): void; // second call signature
} = (param1: unknown, param2?: unknown) => {};

func("a", "b"); // okay
func("a"); // error!  Type '"a"' is not assignable to parameter of type 'null'.
func(null); // okay
func(null, "b"); // okay

其中任何一个都应该适合你。希望有帮助;祝你好运!

链接到代码


推荐阅读